문제 4 · 좌향 힙 병합
문제 4 [4점]
아래 두 좌향 힙leftist heap의 병합 결과를 그리시오.
풀이 및 해설
좌향 힙 병합 규칙
좌향 힙은 각 노드의 널 경로 길이null path length, npl 에 대해 항상 merge는 재귀적으로 (1) 두 루트 중 작은 값을 새 루트로 삼고, (2) 그 오른쪽 서브트리와 나머지 힙을 병합한 뒤, (3) 필요하면 자식을 교환하고 npl을 갱신한다.
병합 과정
→ 루트는 3. 3의 오른쪽(16)과 힙(루트 4)을 병합. → 4. 4의 오른쪽(12)과 힙(루트 16)을 병합. → 12. 12의 오른쪽(NULL)과 16을 병합하면 16이 12의 오른쪽에 붙는다. 12에서 좌우 npl이 같아 교환 없음.- 되돌아오며 4에서도 좌우 npl이 같아 교환 없음.
- 마지막으로 루트 3에서 왼쪽(10, npl=1)보다 오른쪽(4, npl=2)의 npl이 더 커서 좌향 성질이 깨지므로 자식을 교환한다.
병합 결과
text
3
/ \
4 10
/ \ / \
11 12 27 28
/ \ / \
32 41 22 16
/ / /
50 33 33즉 루트 3의 왼쪽에 4의 서브트리, 오른쪽에 10의 서브트리가 온다. 각 노드에서 최소 힙 순서와 좌향 성질(