오늘의 문제 버블 정렬(toy problem)
버블정렬에 대해 알아보기
- 여러개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조.
점은 그래프에서는 정점(vertex)이라고 표현하고, 선은 간선(edge) 이라고 표현
- 트리란 어떤 노드들의 집합으로 노드들은 각 서로 다른 자식을 가지며 이 때 각 노드는 재사용 되지 않는 구조
tree 의 서로 다른 임의의 두 노드에 대해 두 노드를 연결하는 경로는 유일하다.
tree 에는 사이클을 가지는 노드 집합이 존재하지 않는다.
tree 반드시 하나의 root가 존재한다. (부모 노드가 존재하지 않는 노드)
- 이진탐색트리란 이진탐색(binary search)과 연결리스트(linked list)를 결합한 자료구조의 일종
모든 왼쪽 자식들은 루트나 부모보다 작은 값이고, 모든 오른쪽 자식들은 루트나 부모보다 큰 값인 특징을 가지고 있는 이진 트리를 이진 탐색 트리라고 정의
전위 순회
0 > 1 > 3 > 7 > 8 > 4 > 9 > 10 > 2 > 5 > 6 > 11
부모노드 > 왼쪽 자식노드 > 오른쪽 자식노드(재귀)
0번 부모노드를 확인하고 왼쪽 자식노드인 1번으로 이동한 뒤 1번이 부모노드가 되서 1번을 확인하고 3번 왼쪽 자식노드로 이동 3번노드가 부모노드가 되서 확인하고 7번 노드로 이동...
중위 순회
7 > 3 > 8 > 1 > 9 > 4 > 10 > 0 > 5 > 2 > 6 > 11
왼쪽 자식노드 > 부모노드 > 오른쪽 자식노드(재귀)
왼쪽 자식노드가 없어질 때 까지 이동해서 확인(7번) 후 왼쪽 자식노드의 부모노드 3번 확인하고 오른쪽 자식노드 8번 확인 후 3번의 부모노드 1번 확인 후 오른쪽 자식노드 4번의 왼쪽자식노드 9번 확인하고 부모노드 4번확인 후 오른쪽 자식노드 10번확인...
후위 순회
7 > 8 > 3 > 9 > 10 > 4 > 1 > 5 > 11 > 6 > 2 > 0
왼쪽 자식노드 > 오른쪽 자식노드 > 부모노드(재귀)
왼쪽 자식노드가 없어질 때 까지 이동해서 확인(7번) 후 부모노드의 오른쪽 자식노드 8번 확인 > 부모노드 3번 확인 > 3번의 부모노드 1번의 오른쪽 자식노드 4번의 왼쪽자식노드 9번 확인 > 4번의 오른쪽자식노드 10번 > 부모노드 4번 > 4번의 부모노드 1번 확인...
깊이 우선 탐색 (DFS, Depth-First Search)
0 > 1 > 3 > 7 > 8 > 4 > 9 > 10 > 2 > 5 > 6 > 11
더이상 깊이 갈 곳이 없을 경우 옆으로 이동
루트부터 왼쪽으로 리프까지 이동
너비 우선 탐색 (BFS, Breadth-First Search)
0 > 1 > 2 > 3 > 4 > 5 > 6 > 7 > 8 > 9 > 10 > 11
넓게 이동 후 밑으로 이동