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