자료구조
[자료구조]완전 이진 트리를 배열로 나타내기
codingbird1234
2023. 5. 24. 10:07
일반적으로 leftChild와 rightChild를 통해 노드를 연결해가면서 트리를 만듭니다.
하지만 이 완전 이진 트리를 배열 형태로 나타낼 수 있습니다.
위와 같은 완전 이진 트리 있다고 가정합시다.
위 이진 트리에는 12개의 노드가 있습니다.
충분한 크기의 배열이 있다고 가정합시다.
- root 노드인 노드 A의 값을 1번째 인덱스에 넣습니다.
- 노드 A의 leftChild인 노드 B의 값을 2번째 인덱스에 넣습니다.
- 노드 A의 rightChild인 노드 C의 값을 3번째 인덱스에 넣습니다.
- 그 다음, 노드 B의 leftChild인 노드 D의 값을 4번째 인덱스에 넣습니다.
이런 식으로, level이 낮은 노드부터, level이 같다면 왼쪽에 있는 노드부터 차례대로 배열에 넣습니다.
여기에는 한 가지 규칙이 있습니다.
i번째 인덱스에 저장되는 노드의 leftChild는 (2*i)번째 인덱스에 저장되고, rightChild는 (2*i+1)번째 인덱스에 저장됩니다.
예를 들어, 4번째 인덱스에 엤는 노드 D의 rightChild인 노드 I는 9번째 인덱스에 있겠죠?
이러한 규칙으로 위 완전 이진 트리를 배열로 나타내면 아래와 같습니다.
index | node |
0 | - |
1 | A |
2 | B |
3 | C |
4 | D |
5 | E |
6 | F |
7 | G |
8 | H |
9 | I |
10 | J |
11 | K |
12 | L |
만약 완전 이진 트리의 노드가 n개라면 (n+1)짜리 배열을 만들어 1부터 저장하면 됩니다.