Skip to content

문제 10 · AVL 트리 균형 수선

문제 10 [4점]

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

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

수행된 연산(1점). 각 노드의 균형 인수(왼쪽 높이 − 오른쪽 높이)를 아래에서부터 계산하면, 가장 깊은 곳에서 불균형이 나타나는 노드는 **10**입니다.

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

35의 삽입(insert) 연산 직후의 상태입니다. (35를 빼면 모든 노드가 정상 AVL이 됩니다. 루트 40도 인수가 +2로 보이지만, 가장 깊은 불균형 노드 10을 먼저 수선하면 위쪽 40의 균형도 함께 회복됩니다.)

필요한 알고리즘(1점). 불균형 노드 10오른쪽으로 무겁고, 그 오른쪽 자식 20오른쪽으로 무겁습니다(삽입이 오른쪽 자식의 오른쪽 서브트리에 일어남). 이는 우-우(Right-Right, RR) 경우이므로 단일 좌회전(single left rotation) 한 번이면 됩니다.

노드 10에서 좌회전(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

각 노드의 균형 인수를 확인하면 모두 1,0,+1 범위에 들어와 AVL 성질이 회복됩니다(40의 인수는 +1).

키 35 삽입으로 발생한 RR 불균형(노드 10)단일 좌회전 한 번으로 수선

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

PDF