Iniciamos el recorrido por los árboles de búsqueda balanceados, estructuras que controlan su altura para evitar que las operaciones se degraden a tiempo lineal. Trabajaremos en C y usaremos como ejemplos los dos clásicos: AVL y Red-Black Tree.
Este primer tema define el concepto de balanceo, repasa por qué un Binary Search Tree (BST) puede terminar desbalanceado, y muestra por qué el equilibrio mantiene las operaciones en O(log n). También listamos escenarios reales donde resulta imprescindible.
Balancear un árbol es limitar su altura para que crezca de manera proporcional a la cantidad de nodos. Un árbol está bien balanceado cuando la diferencia de alturas entre subárboles es pequeña y la altura total es cercana a log2(n). Para lograrlo, las variantes balanceadas imponen invariantes fáciles de chequear después de cada inserción o eliminación.
typedef struct NodoBalanceado {
int clave;
int altura;
struct NodoBalanceado *izquierdo;
struct NodoBalanceado *derecho;
} NodoBalanceado;
int alturaNodo(NodoBalanceado *nodo) {
return nodo ? nodo->altura : -1;
}
int factorBalance(NodoBalanceado *nodo) {
if (!nodo) return 0;
return alturaNodo(nodo->izquierdo) - alturaNodo(nodo->derecho);
}
El esqueleto anterior refleja el estilo de nodos balanceados: se almacena la altura para recalcular rápido el factor de equilibrio y decidir si se necesitan rotaciones.
Un árbol de búsqueda (BST) sin políticas de balanceo puede degenerar cuando los datos llegan en orden ascendente o descendente. El resultado es una estructura con forma de lista enlazada:
O(n); la ventaja del árbol desaparece.Balancear es la respuesta natural: impide que un caso de datos ordenados arruine la complejidad de las operaciones.
Si la altura permanece proporcional al logaritmo del número de nodos, cada operación visita como máximo unos pocos niveles:
O(log n).AVL logra esta garantía con un balance estricto en cada nodo; Red-Black Tree opta por reglas de color que permiten un poco más de altura a cambio de menos rotaciones promedio.
Los árboles balanceados sostienen servicios y bibliotecas que dependen de operaciones rápidas incluso en escenarios adversos:
Con esta base clara, en los siguientes temas profundizaremos en las propiedades formales y los algoritmos específicos de AVL y Red-Black Tree.