문제 10 · AVL 트리 균형 수선
문제 10 [4점]
아래 트리는 특정 연산 직후 균형balance이 깨진 AVL 트리Andelson-Velskii and Landis tree이다. 어떠한 연산이 수행되었는지 서술(1점)하고, 균형을 수선하기 위해 필요한 알고리즘을 제시(1점)한 후, 수선 과정(2점)을 그리시오.
풀이 및 해설
수행된 연산(1점). 각 노드의 균형 인수(왼쪽 높이 − 오른쪽 높이)를 아래에서부터 계산하면, 가장 깊은 곳에서 불균형이 나타나는 노드는 **10**입니다.
10의 왼쪽 서브트리(7) 높이는 0, 오른쪽 서브트리(20) 높이는 2 → 균형 인수 로 노드10에서 불균형.- 가장 깊은 잎
35(경로40→10→20→30→35)가 새로 삽입되면서 높이가 위로 전파되어 균형이 깨졌습니다.
즉 키 35의 삽입(insert) 연산 직후의 상태입니다. (35를 빼면 모든 노드가 정상 AVL이 됩니다. 루트 40도 인수가 10을 먼저 수선하면 위쪽 40의 균형도 함께 회복됩니다.)
필요한 알고리즘(1점). 불균형 노드 10은 오른쪽으로 무겁고, 그 오른쪽 자식 20도 오른쪽으로 무겁습니다(삽입이 오른쪽 자식의 오른쪽 서브트리에 일어남). 이는 우-우(Right-Right, RR) 경우이므로 단일 좌회전(single left rotation) 한 번이면 됩니다.
수선 과정(2점). 10을 축으로 좌회전하면 오른쪽 자식 20이 위로 올라오고, 20의 왼쪽 서브트리(17)가 10의 오른쪽 자식이 됩니다.
부분트리 10 → 수선 후:
20
/ \
10 30
/ \ \
7 17 35이 부분트리를 루트 40의 왼쪽 자식으로 다시 붙이면 전체 트리는 다음과 같이 균형을 회복합니다.
40
/ \
20 55
/ \ \
10 30 70
/ \ \
7 17 35각 노드의 균형 인수를 확인하면 모두 40의 인수는