Red-Black Tree는 자가 균형 이진 탐색 트리(Self-Balancing BST)의 대표적인 구현 중 하나입니다.
AVL 트리보다 균형 조건이 덜 엄격하여, 삽입과 삭제 시 더 빠르고 회전 횟수가 적다는 장점이 있습니다.
Java의 TreeMap, TreeSet, C++의 std::map, std::set 등이 내부적으로 Red-Black Tree를 사용합니다.
| 항목 | 설명 |
|---|---|
| 정의 | 이진 탐색 트리이면서, 각 노드에 "검정/빨강" 색을 지정하고, 일정 규칙을 만족 |
| 목적 | 트리 높이를 제한하여 탐색, 삽입, 삭제를 O(log n) 시간에 수행 |
| 특징 | 불균형 허용 (균형 조건이 완화됨) → 회전 횟수가 적고 성능 안정적 |
루트에 도달하면 항상 검정으로 설정
Red-Black 트리에서 삭제는 삽입보다 구현이 더 복잡합니다.
| 이름 | 설명 |
|---|---|
| Left Rotation | 왼쪽으로 꺾는 회전 |
| Right Rotation | 오른쪽으로 꺾는 회전 |
| Double Rotation | 삽입/삭제 조건에 따라 두 번 회전 |
왼쪽 회전 예시:
x y
\ → / \
y ← x γ
/ \ α β
β γ
LeftRotate(x) 실행
TreeMap<K,V> 또는 TreeSet<E> 사용
TreeMap<String, Integer> map = new TreeMap<>();
map.put("apple", 1);
map.put("banana", 2);
RedBlackTree