Taller de Árboles AVL

BST · AVL · Python · tuplas con prioridad · 2-3 y Rojo-Negro

Plan para esta noche

Parcial a las 10:00. Lo más valioso es repetir rotaciones hasta que salgan sin pensar, y luego el código.

22:45–23:15
Esta guía: la receta AVL y la regla del medio.
23:15–00:30
Rotaciones rápidas → Inserción hasta acertar 10 seguidas.
00:30–01:15
Rotaciones rápidas → Eliminación (con predecesor).
01:15–02:15
Parcial simulado completo, a mano en papel, y la página le corrige.
02:15–02:30
Descanso. Agua, estirarse.
02:30–04:30
Python: ejercicios 1 a 10. Escriba cada uno en papel antes de llenarlo.
04:30–05:15
Tuplas con prioridad (el punto 2 del parcial).
05:15–05:45
2-3 y Rojo-Negro: solo las reglas y la inserción.
05:45–08:15
Dormir. Aunque sean 2 horas: mientras duerme, el cerebro fija lo que practicó.
08:15–09:00
Un último parcial simulado + releer esta guía.

BST en un minuto

En cada nodo: todo lo de la izquierda es menor, todo lo de la derecha es mayor. Se inserta bajando desde la raíz (menor → izquierda, mayor → derecha) hasta encontrar un hueco.

Eliminar: tres casos

  1. Hoja: se quita y listo.
  2. Un hijo: el hijo sube a ocupar su lugar.
  3. Dos hijos: se reemplaza por su predecesor = el mayor del subárbol izquierdo. Para encontrarlo: un paso a la izquierda, y luego todo a la derecha hasta que no se pueda más. Ese predecesor se quita de donde estaba (allí siempre es hoja o tiene un solo hijo, a la izquierda).

Medidas del árbol (raíz en nivel 0)

MedidaQué esEjemplo (árbol de abajo)

Si el profe cuenta la altura en nodos (y no en aristas), es la misma más 1. Con raíz = nivel 0, lo normal es contar aristas: una hoja tiene altura 0.

AVL: la receta mecánica

FB (factor de balance) = altura(izquierda) − altura(derecha). Árbol vacío = −1, hoja = 0. Un AVL está bien si todos los nodos tienen FB −1, 0 o +1.

  1. Inserte el número como en un BST normal.
  2. Suba desde el nodo nuevo hacia la raíz recalculando FB. El primer nodo con FB +2 o −2 que encuentre es el pivote (el más profundo desbalanceado). En inserción solo se arregla ese y el resto se arregla solo.
  3. Desde el pivote, mire los dos primeros pasos del camino hacia el nodo nuevo:
    CaminoCasoQué se hace
    izquierda, izquierdaLLUna rotación a la derecha sobre el pivote
    derecha, derechaRRUna rotación a la izquierda sobre el pivote
    izquierda, derechaLRIzquierda sobre el hijo, luego derecha sobre el pivote
    derecha, izquierdaRLDerecha sobre el hijo, luego izquierda sobre el pivote
    Línea recta = 1 rotación. Zig-zag = 2 rotaciones.
  4. Rote y verifique que todos los FB quedaron en −1, 0 o +1.

Los nombres cambian según el profe: a LL algunos le dicen "rotación simple a la derecha" o "II". Lo que importa es la forma.

Regla del medio (el truco para hacerlo a mano sin perderse). Tome los 3 nodos del camino: pivote, hijo y nieto. Ordénelos por valor: a < b < c. El del medio (b) queda arriba, a a su izquierda y c a su derecha. Los subárboles que colgaban de esos tres (máximo 4) se cuelgan de nuevo en orden de izquierda a derecha: T1 y T2 bajo a, T3 y T4 bajo c. Funciona igual para los 4 casos.

Los 4 casos, con el ejemplo más pequeño

Eliminar en AVL

  1. Elimine como en BST (hoja / un hijo / predecesor).
  2. Suba desde el padre del nodo que se quitó físicamente hasta la raíz, revisando FB.
  3. Si un nodo queda en ±2, el hijo que se mira es el del lado más alto (el lado contrario de donde se borró). Si ese hijo tiene FB 0, se trata como línea recta: rotación simple.
  4. No pare después de la primera rotación. En eliminación puede haber más de una: siga subiendo hasta la raíz.

Errores típicos

  • Escoger como pivote la raíz cuando el desbalanceado más profundo está más abajo.
  • En LR o RL hacer solo una rotación.
  • Perder el subárbol del medio (T2 o T3) al rotar: siempre se reubica, nunca desaparece.
  • Usar el sucesor en vez del predecesor.
  • En eliminación, detenerse tras la primera rotación.
  • En la serie: listar mal un término (revise dos veces; un número malo daña todo el árbol).