Skip to content

문제 10 · AVL 트리 균형 수선

문제 10 [4점]

아래 트리는 특정 연산 직후 균형balance이 깨진 AVL 트리Andelson-Velskii and Landis tree이다. 어떠한 연산이 수행되었는지 서술(1점)하고, 균형을 수선하기 위해 필요한 알고리즘을 제시(1점)한 후, 수선 과정(2점)을 그리시오.

균형이 깨진 AVL 트리
문제 10의 불균형 AVL 트리
풀이 및 해설

수행된 연산(1점). 각 노드의 균형 인수(왼쪽 높이 − 오른쪽 높이)를 아래에서부터 계산합니다.

  • 40의 왼쪽 서브트리(루트 20) 높이는 3, 오른쪽 서브트리(루트 55) 높이는 1 → 균형 인수 +2로 루트 40에서 불균형.
  • 가장 깊은 잎 35(경로 40→20→37→30→35, 깊이 4)가 새로 삽입되면서 높이가 위로 전파되어 균형이 깨졌습니다.

35의 삽입(insert) 연산 직후 균형이 깨진 상태입니다. (35를 빼면 모든 노드의 균형 인수가 |1|이 되어 정상 AVL이 됩니다.)

필요한 알고리즘(1점). 불균형 노드 40왼쪽으로 무겁고, 그 왼쪽 자식 20오른쪽으로 무겁습니다(삽입이 왼쪽 자식의 오른쪽 서브트리에 일어남). 이는 좌-우(Left-Right, LR) 경우이므로 **이중 회전(double rotation)**이 필요합니다.

20에서 좌회전40에서 우회전

수선 과정(2점). LR 이중 회전을 적용하면, 20의 오른쪽 자식 37이 새 부분트리의 루트로 올라옵니다.

  1. 20을 축으로 좌회전: 3720 위로 올라오고, 37의 왼쪽 서브트리(30쪽)가 20의 오른쪽 자식이 됨.
  2. 40을 축으로 우회전: 3740 위로 올라와 부분트리의 새 루트가 됨. 37의 오른쪽 서브트리(38)는 40의 왼쪽 자식이 됨.

수선 후의 트리:

             37
          /      \
        20        40
       /  \      /   \
     17    30   38    55
     /      \            \
    15      35           70

각 노드의 균형 인수를 다시 확인하면 모두 1,0,+1 범위에 들어와 AVL 성질이 회복됩니다(37의 왼·오른쪽 높이 모두 2).

키 35 삽입으로 발생한 LR 불균형이중 회전(좌회전 후 우회전), 새 루트는 37

👉 실습(C++)에서 확인하기

PDF