Lo que vas a aprender
- Cómo funciona un árbol binario de búsqueda.
- Por qué un ABB se puede degenerar.
- Qué es el factor de equilibrio de un nodo.
- Las rotaciones simples y dobles, y cuándo aplicar cada una.
- Cómo insertar en un AVL paso a paso.
- Por qué la altura de un AVL es siempre logarítmica.
Fundamentos teóricos
Árbol binario de búsqueda
En cada nodo, todo lo que hay en el subárbol izquierdo es menor y todo lo del derecho es mayor. Para buscar se compara con la raíz y se baja por un lado. El recorrido en inorden (izquierda, raíz, derecha) da los elementos ordenados. Puedes ver árboles animados en el simulador de estructuras de datos.
Insertar 1, 2, 3, 4, 5 en orden da una “rama” con todos los nodos a la derecha: una lista enlazada con más memoria.
Factor de equilibrio
(algunos libros lo definen al revés; lo importante es ser coherente). Un árbol es AVL si en todos los nodos .Rotaciones
Cuando una inserción deja un nodo con , se corrige con una rotación sobre ese nodo (el más bajo que se haya desequilibrado):
Rotación simple a la derecha sobre el nodo con hijo izquierdo : sube a ocupar el lugar de , pasa a ser hijo derecho de , y el antiguo subárbol derecho de pasa a ser el izquierdo de . Se conserva el orden del ABB y solo cambian tres punteros.
Código de una inserción
Altura logarítmica
El AVL con menos nodos para una altura tiene nodos: crece como Fibonacci. De ahí sale que la altura de un AVL con nodos es como mucho unas Es decir, en el peor caso es solo un 44 % más alto que un árbol perfecto.AVL frente a rojo-negro
En disco se usan árboles B, con muchos hijos por nodo, para leer pocos bloques.
Ejemplos resueltos
Ejemplo 1 · Insertar 10, 20, 30 (caso RR)
Ejemplo 1 · Insertar 10, 20, 30 (caso RR)
Tras insertar 10 y 20, el 20 es hijo derecho del 10. Al insertar 30 como hijo derecho del 20, el nodo 10 queda con , y su hijo derecho con : caso RR.Rotación a la izquierda sobre 10: el 20 sube a la raíz, con 10 a la izquierda y 30 a la derecha.
Ejemplo 2 · Insertar 30, 10, 20 (caso LR)
Ejemplo 2 · Insertar 30, 10, 20 (caso LR)
30 es la raíz, 10 su hijo izquierdo y 20 el hijo derecho del 10. El 30 queda con y su hijo izquierdo con : caso LR.Rotación izquierda sobre 10 (el 20 sube sobre el 10) y rotación derecha sobre 30. Resultado: 20 en la raíz, 10 y 30 como hijos.
Ejemplo 3 · Secuencia completa
Ejemplo 3 · Secuencia completa
Insertar 1, 2, 3, 4, 5, 6, 7 en orden:
- 1, 2, 3: rotación RR en 1. Raíz 2.
- 4, 5: rotación RR en 3. Árbol: 2 (1, 4 (3, 5)).
- 6: el 2 queda con : rotación RR en 2. Raíz 4: 4 (2 (1, 3), 5 (—, 6)).
- 7: rotación RR en 5.
Ejemplo 4 · ¿Es AVL?
Ejemplo 4 · ¿Es AVL?
Raíz 8 con hijo izquierdo 4 (hijos 2 y 6) y sin hijo derecho. La raíz tiene subárbol izquierdo de altura 2 y derecho de altura 0: . No es AVL: necesitaría una rotación derecha (caso LL, porque y se trata como LL).
Errores frecuentes
- Rotar sobre la raíz en lugar del nodo desequilibrado más bajo.
- Aplicar una rotación simple en un caso doble (LR o RL): el árbol sigue desequilibrado.
- Olvidar actualizar las alturas después de cada rotación, de abajo arriba.
- Confundir el signo del factor de equilibrio al mezclar convenios de libros distintos.
- Perder un subárbol al rotar: el subárbol “del medio” (T2) cambia de padre.
Preguntas frecuentes
¿Merece la pena frente a una tabla hash?
¿Merece la pena frente a una tabla hash?
Una tabla hash busca en de media, más rápido. Pero un árbol mantiene los datos ordenados: permite recorrerlos en orden, buscar el mínimo, el máximo, el siguiente de un valor o todos los valores de un rango. Para eso, un árbol equilibrado es mejor.
¿Y el borrado?
¿Y el borrado?
Se borra como en un ABB (si el nodo tiene dos hijos, se sustituye por su sucesor en inorden) y luego se sube hacia la raíz comprobando el equilibrio de cada antecesor y rotando donde haga falta.
Temas relacionados
Estructuras de datos
Pilas, colas, listas y árboles animados.
Árbol binario enhebrado
Recorrer un árbol sin pila.
Montículos
Otro árbol binario con una propiedad distinta.