O(N)까지 느려질 수 있습니다.O(log N)을 보장합니다.규칙 시각화
규칙 4 (레드 연속 금지):
[B]
/ \
[R] [R]
/ \ / \
[B][B][B][B] (OK)
규칙 5 (블랙 높이 동일):
[B]
/ \
[B] [B]
/ \
[R] [R]
\ /
[NIL] [NIL]
모든 루트->NIL 경로의 Black 개수 동일
회전은 BST의 중위 순서(정렬 순서)를 깨지 않으면서 트리 모양만 바꿉니다.
왼쪽 회전(Left Rotate) 오른쪽 회전(Right Rotate)
x y
/ \ / \
T1 y -----> x T3
/ \ / \
T2 T3 T1 T2
(x의 오른쪽이 위로) (y의 왼쪽이 위로)
새 노드는 Red로 삽입합니다. (처음부터 Black이면 Black Height 규칙 깨지기 쉬움)
삼촌(uncle) 색에 따라 처리:
마무리: 루트는 항상 Black으로 보정
복구 판단 기준:
처리 방식:
삭제 복구는 삽입보다 케이스가 많아 구현 난도가 높습니다.
O(log N)h가 2 * log2(N + 1) 이하가 되도록 제한됩니다.std::map, std::set, std::multimap, std::multiset은O(log N)을 제공합니다.O(log N)을 보장하는 이유는?