CS/개념
[자료구조] 트리(tress) 정의 및 구현하기
히퓨
2025. 5. 30. 13:32
1. 트리(Tree)란?
데이터가 수직적으로 이루어진 비선형 자료구조
트리는 노드(node)들의 집합으로 이루어져있으며, 노드들은 edge로 연결되어있다
- 각각의 노드들은 데이터를 포함하고 있다.
- 트리의 첫번째 노드(가장 위)는 루트 노드(root node)라고 지칭
- 하위 노드들은 자식 노드(children node)라고 칭한다
- 자식 노드가 없는 노드는 리프 노드(leaf nodes) 또는 외부 노드(external nodes)라고 한다.
- 리프 노드가 아닌 노드는 내부 노드(internal nodes)라고 한다.
- 같은 부모를 가진 노드들은 형제 노드(sibling nodes)라고 한다.
- A는 B와 C의 부모 노드이다
- B는 A의 자식 노드이다
- B와 C는 형제 노드 관계이다
- E,F,H,I 그리고 J는 리프 노드이다
- 깊이(depth)는 루트 노드에서 현재 노드까지의 엣지 수를 의미한다.
예: 위 그림에서 노드 I의 깊이는 3이다. - 높이(height)는 현재 노드에서 가장 깊은 리프 노드까지의 엣지 수를 의미한다.
예: 노드 B의 높이는 2이다. (경로: B → D → H)
2. 이진 트리(Binary Trees)
이진 트리는 노드들이 자식 노드를 두 개까지만 가질 수 있는 자료구조이다
두 개의 자식 노드는 left node / right node라고 지칭한다
이진 트리는 기본적으로 3개의 데이터를 가진다 :
1. 노드의 값(value) : integer, string, character, etc
2. left node 포인터
3. right node 포인터
위 사진은 이진 트리의 일종
3. 이진 탐색 트리
이진 탐색 트리는 특정 속성을 만족하는 이진 트리를 지칭한다:
하위 트리의 왼쪽 노드는 루트 노드보다 작고, 모든 오른쪽 노드보다 작은 것
위 특성을 이용해서 매우 빠르게 특정 노드를 탐색할 수 있다
아래처럼, 값 : 4를 탐색하고자 한다면, 10 -> 5 -> 3 3개의 edge만 이용해서 찾고자 하는 값을 탐색할 수 있다!
트리를 탐색하는 방법으로는 3가지가 있다 :
- In-Order Traversal: 왼쪽 → 루트 → 오른쪽 → 결과: A → B → C
- Pre-Order Traversal: 루트 → 왼쪽 → 오른쪽 → 결과: B → A → C
- Post-Order Traversal: 왼쪽 → 오른쪽 → 루트 → 결과: A → C → B
4. Full Binary Tree
특성 :
- 모든 잎은 같은 깊이에 존재한다
- 리프가 아닌 모든 노드는 두개의 자식 노드를 가진다
5. Complete Binary Tree
특성 :
- 각 레벨에서 가질 수 있는 최대의 노드를 가진다
- 가장 하위 레벨에서 모든 노드들은 가능한 왼쪽에 정렬된다