Tree
Tree traversal
트리는 그래프의 여러 구조 중 무방향 그래프의 구조를 가지고 있다.
데이터가 바로 아래에 있는 하나 이상의 데이터에 무방향으로 연결되는 계층적 자료구조이며, 하나의 데이터 뒤에 여러개의 데이터가 존재할 수 있는 비선형 구조로 되어 있다. 또한 아래로만 뻗기 때문에 사이클이 없다.
트리의 예시 : 폴더구조, 대진표, 조직도 등
효율적인 탐색을 위해 만들어진 여러가지 트리 중 많이 쓰이는 트리이다.
자식 노드가 최대 두 개인 노드들로 구성된 트리를 이진 트리라고 정의한다.
이진 트리는 자료의 삽입, 삭제 방법에 따라 Full binary tree(정 이진 트리), Complete binary tree (완전 이진 트리), Perfect binary tree (포화 이진 트리)로 나뉜다.
이름 | 의미 |
---|---|
full(정) | 각 노드가 0 개 혹은 2개의 자식 노드를 갖는 트리 |
complete(완전) | 왼쪽부터 오른쪽으로 채워 가면서, 마지막 레벨을 제외한 모든 레벨이 차 있고, 마지막 레벨에 적어도 하나의 노드가 있는 트리 |
perfect(포화) | 모든 레벨이 가득 차 있는 트리 |
모든 왼쪽 자식은 루트나 부모보다 작은 값이고, 모든 오른쪽 자식은 루트나 부모보다 큰 값을 가진 트리를 이진 탐색 트리라고 정의한다.
Heap 은 우선순위 큐를 구현하기위한 트리로, 완전 이진 트리 형태를 가진다.
부모 <= 자식
형태의 heap. root 에는 최소값이 위치한다.부모 >= 자식
형태의 heap. root 에는 최대값이 위치한다.
이미지 : Heap Data Structure | GeeksforGeeks
힙에서의 부모 노드와 자식 노드의 관계
왼쪽 자식의 인덱스 = (부모의 인덱스) * 2
오른쪽 자식의 인덱스 = (부모의 인덱스) * 2 + 1
부모의 인덱스 = (자식의 인덱스) / 2
의 몫. (나머지는 무시)
이미지 : [자료구조] 힙(heap)이란 | Heee's Development Blog
삽입/삭제가 일어날 경우 노드들이 위치를 바꾸며 규칙에 맞게 정렬된다.
특정 목적을 위해 트리의 모든 노드를 한 번씩 방문하는 것.
먼저 루트를 체크한 뒤 왼쪽이 끝나면 오른쪽을 체크한다.
먼저 왼쪽을 체크한 뒤 루트를 체크하고 오른쪽을 체크한다.
먼저 왼쪽을 체크한 뒤 오른쪽을 체크하과 루트를 체크한다.
위 세 순회는 DFS 의 일종이다.
Red-Black tree - 균형을 알아서 맞추는 이진 탐색 트리
B-tree 등