Skip to content

문제 12 · 레드-블랙 트리의 재귀적 제거

문제 12 [4점]

제거(remove) 연산에서 같은 성격의 재귀적 작업이 세 번 이상 발생하는 레드-블랙 트리red-black tree 예시를 만드시오(빗금 등으로 레드 표시해도 좋음, 어떤 노드가 제거되는지 표시 필요).

풀이 및 해설

레드-블랙 트리에서 검은 노드를 삭제하면 그 자리에 "이중 흑색(double black)" 결손이 생깁니다. 이때 형제가 검은색이고 형제의 두 자식도 모두 검은색이면, 형제를 빨간색으로 칠하고 결손을 부모로 한 단계 위로 밀어 올리는(case 2) 처리를 합니다. 이 처리는 위로 올라가며 같은 성격으로 반복될 수 있습니다.

이 반복이 3번 이상 일어나게 하려면, 모든 노드가 검은색인 완전(포화) 이진 트리를 만들고 가장 깊은 잎을 제거하면 됩니다. 예시로 15개 노드(높이 3)를 모두 검은색으로 두고, 1(가장 왼쪽 잎)을 제거합니다.

                8(B)
            /          \
         4(B)          12(B)
        /    \         /     \
     2(B)   6(B)    10(B)    14(B)
     / \    / \     /  \     /  \
   [1] 3   5   7   9   11  13   15      (모두 검은색, [1]을 제거)

이 트리는 모든 경로의 검은 높이가 같으므로 유효한 레드-블랙 트리입니다. 검은 잎 1을 제거하면 결손이 위로 전파됩니다.

  1. 1 자리에 이중 흑색 결손 → 형제 3(검), 두 자식(nil) 모두 검 → 3을 빨강으로, 결손을 부모 2로 올림.
  2. 2에서 결손 → 형제 6(검), 자식 5,7 모두 검 → 6을 빨강으로, 결손을 부모 4로 올림.
  3. 4에서 결손 → 형제 12(검), 자식 10,14 모두 검 → 12를 빨강으로, 결손을 부모 8(루트)로 올림.
  4. 루트에 도달 → 루트를 검은색으로 두고 종료.

같은 성격의 재귀적 처리(형제를 빨강으로 칠하고 결손을 위로 전파)가 정확히 3번 일어났습니다.

모든 노드가 검은 높이-3 포화 트리에서 가장 깊은 잎 제거결손 상향 전파가 3회 반복

제거 후 트리(전파된 곳의 형제 3, 6, 12가 빨강이 됨):

                8(B)
            /          \
         4(B)          12(R)
        /    \         /     \
     2(B)   6(R)    10(B)    14(B)
        \    / \     /  \     /  \
       3(R) 5   7   9   11  13   15

(높이를 4 이상으로 키우면 전파 횟수도 그만큼 늘어납니다.)

PDF