Red-Black Tree es un BST auto-balanceado con 5 propiedades que garantizan altura ≤ 2 log₂(n+1). Es más relajado que AVL (balance aproximado) pero con menos rotations en inserción/eliminación, haciéndolo más rápido en práctica para workloads con muchas modificaciones.
Usado en C++ std::map, Java TreeMap, Linux kernel (CFS scheduler), y databases.
5 Propiedades
- Cada nodo es rojo o negro.
- La raíz es negra.
- Todas las hojas (NIL) son negras.
- Si un nodo es rojo, ambos hijos son negros (no dos rojos consecutivos).
- Para cada nodo, todo camino a sus hojas descendientes tiene la misma cantidad de nodos negros (black-height).
Insert Fix-Up
- Inserta nodo como en BST estándar, color = rojo (preserva black-height).
- Si padre es negro: no hay problema.
- Si padre es rojo: tripleta roja (padre, nodo, tío).
- Tío rojo: recolorea padre y tío a negro, abuelo a rojo, continúa desde abuelo.
- Tío negro: rotación + recoloring según casos (triangle o line).
- Raíz siempre negra al final.
Ejemplo: Tío Rojo
G (negro)
/ \\
P (rojo) U (rojo)
/ \\
N (nuevo, rojo) ...
Recolorea: P→negro, U→negro, G→rojo. Ahora el problema sube al abuelo.
Delete Fix-Up
Eliminar en RBT es más complejo que AVL porque la estructura es más flexible. Requiere hasta O(log n) rotations y recoloring.
Comparación
| Propiedad | AVL | Red-Black |
|---|---|---|
| Balance | Estricto | Aproximado |
| Altura | ~1.44 log n | ~2 log n |
| Rotations insert | Más | Menos |
| Rotations delete | Más | Menos |
| Search | Más rápido | Un poco más lento |
| Insert/Delete | Más caro | Más barato |
Aplicaciones
- C++ std::map/set — RBT es el default
- Java TreeMap — RBT implementation
- Linux kernel — CFS scheduler usa RBT
- Databases — índices en memoria
- JVM — garbage collection (card table)
- Enseñanza — introduce balance relajado y fix-up cases
Trayectoria de Práctica
- Investiga insert fix-up: traza los casos con tío rojo, triangle, y line.
- Investiga delete fix-up: ¿por qué es más complejo?
- Verifica que todas las rutas a hojas tienen el mismo black-height.
- Compara altura con AVL: para n=1000, ¿cuántos niveles de diferencia?
- Investiga LLRB (Left-Leaning Red-Black): ¿cómo simplifica cases?