1. 트리
계층적 구조의 자료를 표현할 때 사용한다.
1-1 트리의 정의
- 하나 이상의 노드로 이루어진 유한집합
- Root라고 하는 노드가 하나 존재
- 나머지 노드들은 n (>= 0)개의 집합 T1, T2, ..., Tn으로 분할
-> Tn : 분리된 트리 (Root의 서브 트리)
1-2 트리에 관련된 용어들
- 노드의 차수(degree) (A: 3): 특정 노드 하위에 노드가 몇 단계 있는지
- 트리의 차수(degree) (3): Root 노드 하위에 노드가 몇 단계 있는지
- 단말 노드(leaf of terminal node): 각 노드의 가장 하위 노드
- 부모 노드(E: B), 자식 노드(B: E & F), 형제 노드(E&F): 각 노드의 관계
- 조상 노드(M: H. D, A), 자손 노드(B: E, F, K, L)
- Level (Root: 1), 높이 또는 깊이 (4)
2. 이진 트리 (binary tree)
- 모든 노드의 차수 (degree)가 2를 넘지 않는 트리
-> 일반 트리에 비해 구현 용이
- 왼쪽 서브 트리와 오른쪽 서브 트리가 구분
2-1 이진 트리의 정의
- 유한 개의 노드들의 집합
- 노드 수는 0개가 될 수 있음
- 하나의 root 노드와 왼쪽 서브 트리, 오른쪽 서브 트리로 구성
- 각 서브 트리는 다시 이진 트리
2-2 트리를 이진 트리로 변환하는 방법
- Left Child - Right Sibling 표현
1) 노드 A의 제일 왼쪽 노드 => A의 왼쪽 자식 노드
2) A의 나머지 자식 노드들 => 자식 노드의 오른족 자식
* 중요한 점은 한 노드의 자식 노드들 부터 차례로 정리해야 합니다.
-> A의 자식 노드 정리하고, B의 자식 노드 정리하고, ...
2-3 이진 트리의 성질
- 최대 노드 수
1) 이진 트리의 레벨 i에서 최대 노드 수는 2^(i-1) (i >= 1)
2) 깊이가 k인 이진 트리가 가질 수 있는 최대 노드 수 =
- 단말 노드 수와 차수가 2인 노드 수
1) n0: 단말 노드 수, n2: 차수가 2인 노드의 수
2) n0 = n2 + 1
-> n = n0 + n1 + n2 & n = E (선의 수) + 1 = n1 + 2n2 + 1
- 포화 이진 트리 (full binary tree): 깊이가 k이고, 노드 수가 2^(k) - 1 (k >= 0)인 이진 트리
2-4 완전 이진 트리 (Complete Binary Tree)
2-4-1 완전 이진 트리의 정의
깊이가 k이고 노드 수가 n인 이진 트리의 각 노드들이
깊이가 k인 포화 이진 트리에서 1부터 n까지 번호를 붙인 노드들과
1대 1로 일치하는 이진 트리
2-5 이진 트리의 예
3 이진 트리의 표현
3-1 배열 표현법
1차원 배열에 트리를 저장한다.
1) 루트 노드는 [1]에 저장
2) 부모 노드가 [i]에 저장될 경우,
2-1) 왼쪽 자식 노드는 [2*i]에 저장
2-1) 오른쪽 자식 노드는 [2*i + 1]에 저장
3-1-2 배열 표현의 예
3-2 링크 표현법
노드를 구조체로 표현
이중 연결리스트와 비슷한 형태를 가집니다.
3-2-1 링크 표현의 예
'Programming > C' 카테고리의 다른 글
[자료구조 C 언어] C 프로그래밍 자료구조 - 13 : 힙 트리 (Heap Tree)와 우선 순위 큐 (Priority Queue) (0) | 2020.03.16 |
---|---|
[자료구조 C 언어] C 프로그래밍 자료구조 - 12 : 스레드 이진 트리 (Thread Binary Tree) (0) | 2020.03.16 |
[자료구조 C 언어] C 프로그래밍 자료구조 - 10 : 이중 연결리스트 (Doubly Linked List) (0) | 2020.03.10 |
[자료구조 C 언어] C 프로그래밍 자료구조 - 9 : 원형 연결리스트 (Circular Linked List) (0) | 2020.03.09 |
[자료구조 C 언어] C 프로그래밍 자료구조 - 8 : 연결리스트를 사용한 큐 (Queue) (0) | 2020.03.05 |