배열 인덱스를 통해 쉽게 부모-자식 노드를 알 수 있습니다.
if) 시작 인덱스를 1로 두면 다음과 같이 parent와 child 노드 번호 관계식을 갖습니다.
→ k의 left child 번호 → k × 2
→ k의 right child 번호 → k × 2 + 1
→ k의 parent 번호 → k / 2
시뮬레이션 (최대 Heap 구성)
부모 노드 < 자식 노드인 관계가 존재하므로 원소 위치를 바꾸어야 합니다.
※ Heap을 구성하는 과정을 『Heapify』 라고 합니다.
부모 노드 7 < 자식 노드 15, 14 입니다.
부모노드는 자식 노드 중 더 큰 값인 15와 위치가 바뀝니다.
부모 노드 9 < 자식 노드 12, 10 이므로
부모노드는 자식 노드 중 더 큰 값인 12와 위치가 바뀝니다.
부모 노드 3 < 자식 노드 15, 12 이므로
부모노드는 자식 노드 중 더 큰 값인 15와 위치가 바뀝니다.
(바뀐 위치에서) 부모 노드 3 < 자식 노드 7, 14 이므로
부모노드는 자식 노드 중 더 큰 값인 14와 위치가 바뀝니다.
부모노드 11 > 자식 노드 8, 6 이므로 변화 x
부모 노드 13 > 자식 노드 4, 2 이므로 변화 x
부모 노드 5 < 자식 노드 11, 13 이므로
부모노드는 자식 노드 중 더 큰 값인 13과 위치가 바뀝니다.
(바뀐 위치에서) 부모 노드 5 > 자식 노드 4, 2 이므로 변화 x
최상단 부모 노드 1은 자식 노드보다 작기 때문에
재귀적으로 내려와서 제일 아래(Leaf)에 위치하게 됩니다.
완선된 Heap은 아래와 같습니다.
- Max Heap이므로 Root Node에 위치한 값은 최대값입니다.
- 부모 노드 ≥ 자식 노드 관계 입니다.
'자료구조' 카테고리의 다른 글
[스택] Stack 이란? (0) | 2021.04.22 |
---|---|
우선순위 큐 (Priority Queue) (0) | 2021.03.21 |
힙(Heap) 자료구조란? (0) | 2021.02.27 |
그래프 정의 및 구현 방식 (인접 행렬 & 인접 리스트) (0) | 2021.02.25 |
그래프 표현 (인접 리스트 / 인접 행렬) (0) | 2021.02.25 |
댓글