1. 트리 정의하기
트리(Tree)
- 데이터 사이의 계층 관계를 나타내는 자료구조
루트(root)
- 트리의 가장 윗부분에 위치하는 노드
- 하나의 트리에는 하나의 루트가 있음
리프(leaf)
- 트리의 가장 아랫부분의 위치하는 노드
- 더이상 뻗어나갈 수 없는 마지막에 위치한 노드
안쪽 노드
- 루트를 포함하여 리프를 제외한 노드
자식(child)
- 어떤 노드로부터 가지로 연결된 아래쪽 노드
부모(parent)
- 어떤 노드에서 가지로 연결된 위쪽 노드
형제(sibling)
- 같은 부모를 가지는 노드
조상(ancestor)
- 어떤 노드에서 가지로 연결된 위쪽 노드 all
자손(descendant)
- 어떤 노드에서 가지로 연결된 아래쪽 노드 all
레벨(level)
- 루트로부터 얼마나 떨어져 있는지에 대한 값
차수(degree)
- 노드가 갖는 자식의 수
- 모든 노드의 차수가 n이하인 트리 = n진 트리
높이(height)
- 루트부터 가장 멀리 떨어진 리프까지의 거리(리프 레벨의 최댓값)
서브 트리(subtree)
- 트리 안에서 다시 어떤 노드를 루트로 정하고 그 자손으로 이루어진 트리
널 트리 (nulltree)
- 노드,가지가 없는 트리
2. 순서 트리와 무순서 트리 정의하기
순서 트리 (ordered tree)
- 형제 노드의 순서가 있는 트리
무순서 트리 (unordered tree)
- 형제 노드의 순서가 없는 트리
3. 순서 트리의 탐색 방법 알아보기
- 순서 트리의 노드를 스캔하는 방법
1) 너비 우선 탐색 (breadth-first Search)
- 낮은 레벨에서 시작해 왼쪽에서 오른족 방향으로 검색하고 한 레벨에서의 검색이 끝나면 다음 레벨로 내려감
- A->B->C->D->E->F->G->H->I->J->K->L
2) 깊이 우선 탐색 (depth - first Search)
- 리프까지 내려가면서 검색하는 것을 우선순위로 하는 탐색 방법
- 리프에 도달해 더 이상 검색을 진행할 곳이 없는 경우에는 부모에게 돌아감
- 노드 A는 B와 C라는 두개의 자식 노드를 가짐
- 깊이 우선 탐색을 진행하면서 노드 A는 3회 지나감
- A에서 B로 내려가며 A를 지남
- B에서 C로 지나가며 A를 지남
- C에서 A로 되돌아오면서 A를 지남
노드를 지나가는 최댓값 3회
- '언제 노드를 방문할지'에 따라 3가지로 구분
1)전위 순회(Preorder)
- 노드 방문 -> 왼쪽 자식 -> 오른쪽 자식
- A->B->D->H->E->I->J->C->F->K->L->G
2) 중위 순회 (Inorder)
- 왼쪽 자식 -> 노드 방문 -> 오른쪽 자식
- H->D->B->I->E->J->A->K->F->L->C->G
3) 후위 순회 (Postorder)
- 왼쪽 자식 -> 오른쪽 자식 -> (돌아와)노드 방문
- H->D->I->J->E->B->K->L->F->G->C->A
'C언어 > 자료구조' 카테고리의 다른 글
10 -1 해시법 (1) (0) | 2023.08.04 |
---|---|
9-2장 이진 트리와 이진 검색 트리 (0) | 2023.08.04 |
8-4장 원형 이중 연결 리스트 (0) | 2023.08.03 |
8-3장 커서를 이용한 연결 리스트 (0) | 2023.08.03 |
8-2장 포인터를 이용한 연결 리스트(2) (0) | 2023.08.02 |