문제 4 · 좌향 힙 병합
문제 4 [4점]
아래 두 좌향 힙leftist heap의 병합 결과를 그리시오.
풀이 및 해설
좌향 힙 병합 규칙
좌향 힙은 각 노드의 널 경로 길이null path length, npl (그 노드에서 자식이 하나 이하인 노드까지의 최단 거리)에 대해, 항상 merge(H1, H2)는 다음을 재귀적으로 수행한다.
- 두 루트 중 작은 값을 새 루트로 삼는다(여기서는
이므로 4). - 작은 루트의 오른쪽 서브트리와 나머지 힙을 재귀적으로 병합한다.
- 병합 후 자식의 npl 조건이 깨지면 왼·오른쪽 자식을 교환하고, npl 값을 갱신한다.
병합 과정
→ 루트는 4. 4의 오른쪽(루트 8)과 힙(루트 6)을 병합. → 6. 6의 오른쪽(7)과 힙(루트 8_A)을 병합. → 7. 7의 오른쪽(NULL)과 8_A를 병합하면 8_A. npl 조건 위배로 7의 자식을 교환 → 7의 왼쪽에 8_A.- 되돌아오며 각 노드에서 npl을 확인해 필요 시 자식을 교환한다. 루트 6, 루트 4에서는 좌우 npl이 같아 교환이 없다.
병합 결과
text
4
/ \
19 6
/ \ / \
27 20 8 7
/ / |
43 14 8
|
12
/ \
15 25각 노드에서 최소 힙 순서(부모 ≤ 자식)와 좌향 성질(