데브허브 | DEVHUB | 자료구조 - 레드 블랙 트리
- 레드 블랙 트리는 이진 탐색 트리와 AVL 트리의 장점을 절충하여, 느슨한 균형을 유지하면서도 효율적인 탐색 및 삽입/삭제 성능을 제공합니다. 🧘♀️
- 이진 탐색 트리가 정렬된 데이터에 취약하여 편향될 수 있는 반면, AVL 트리는 엄격한 균형으로 삽입/삭제 비용이 높습니다. ⚖️
- 레드 블랙 트리는 모든 노드가 빨강 또는 검정으로 구분되며, 루트는 검정, 리프 노드(빈 노드)는 검정이어야 합니다. ⚫🔴
- 빨강 노드의 자식은 반드시 검정이어야 하며 (연속된 빨강 노드 금지), 어떤 노드에서 리프까지의 모든 경로에는 동일한 수의 검정 노드가 포함되어야 합니다. 🚫❤️❤️
- 이 다섯 가지 규칙을 기반으로, 규칙 위반 시 회전(Rotation) 및 색 변경(Color Change)을 통해 트리의 균형을 유지합니다. 🔄🎨
- 노드 삽입 시 새 노드는 기본적으로 빨강으로 추가되며, 규칙 위반 시 부모-자식 관계, 삼촌 노드의 색상 등에 따라 회전 또는 색 변경이 발생합니다. ➕
- 노드 삭제 시에도 규칙 유지를 위해 복잡한 절차(예:
move_red_left, move_red_right를 통한 빨강 노드 확보)와 fix_up 작업을 거쳐 트리를 재조정합니다. 🗑️
- 특히 Left-Leaning Red-Black Tree (LLRB) 변형은 빨강 노드를 항상 왼쪽에 두어 케이스 수를 줄이는 방식으로 구현 복잡성을 완화합니다. ⬅️
- 레드 블랙 트리의 알고리즘은 매우 복잡하여, 개별 코드 구현보다는 트리가 어떤 원리로 균형을 유지하는지 큰 그림을 이해하는 것이 중요합니다. 🤯
- 구현 코드는 다른 트리보다 길고 복잡하며,
rotate_left, flip_colors, insert, delete 등의 메소드들이 상호작용하며 규칙을 지킵니다. 💻
fix_up 메소드는 노드 삭제 후 트리의 구조나 색상 변경으로 인해 깨진 규칙을 최종적으로 복구하는 역할을 합니다. 🛠️