Skip to content

문제 6 · 레드-블랙 트리 삽입

문제 6 [2점]

아래 레드-블랙 트리red-black tree에서 키 7이 삽입되고 균형을 맞추기까지의 과정을 그래프 모양과 함께 그리시오.

10513361528

(빨강 = 붉은 원, 검정 = 검은 원. 루트 10은 검정입니다.)

풀이 및 해설

1단계 — 이진 탐색 트리 규칙으로 삽입 위치 찾기

새 키 7은 항상 빨강red으로 삽입합니다. 루트부터 내려갑니다.

  • 7 < 10 → 왼쪽으로 (5)
  • 7 > 5 → 오른쪽으로 (6)
  • 7 > 6 → 오른쪽으로 (8)
  • 7 < 8 → 8의 왼쪽 자식으로 삽입
105133615287

이제 7(빨강)–8(빨강) 이 부모–자식으로 나란히 빨강이 되어 이중 빨강 위반red-red violation이 생깁니다.

2단계 — 케이스 판정

  • 새 노드 z = 7, 부모 = 8(빨강), 조부모 = 6(검정)
  • 삼촌uncle = 6의 왼쪽 자식 = nil(검정)

삼촌이 검정이므로 회전rotation으로 해결합니다. 부모 8은 조부모 6의 오른쪽 자식이고, z(7)은 부모 8의 왼쪽 자식이므로 이는 오른쪽-왼쪽(RL) 케이스입니다.

3단계 — 회전과 재색칠

RL 케이스는 두 번의 회전이 필요합니다.

  1. 부모 8에서 우회전right rotation: 7이 위로 올라가 6의 오른쪽 자식이 되고, 8은 7의 오른쪽 자식이 됩니다. → 이제 6–7–8이 한쪽으로 정렬된 RR 형태.
  2. 조부모 6에서 좌회전left rotation: 7이 다시 위로 올라가 부분 트리의 꼭대기가 되고, 6은 7의 왼쪽 자식, 8은 7의 오른쪽 자식이 됩니다.
  3. 재색칠recolor: 새 꼭대기 7 → 검정, 두 자식 6·8 → 빨강.

결과적으로 5의 오른쪽 자식이 7(검정) 이 되고, 7의 두 자식은 6(빨강)·8(빨강) 이 됩니다.

105133715268

루트에서 어떤 리프로 가든 검정 노드 수(검정 높이black height)가 같아지고, 빨강이 연속되지 않아 레드-블랙 트리의 성질이 다시 만족됩니다.

5의 오른쪽 자식 7(검정), 7.left=6(빨강), 7.right=8(빨강)

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

PDF