1_19_arboles_avl-rotacion

Embed Size (px)

Citation preview

rboles: AVL-Rotacin

rbolesBalanceado-AVL-RotacinContenido1. RBOL BALANCEADO______________________1 2. DEFINICIN DE RBOL AVL________________1 2.1 DEFINICIN DE ALTURA DE UN RBOL________________1 2.2 DEFINICIN FORMAL___________________________2 3 ROTACIN__________________________________2 3.1 ROTACIN A LA DERECHA________________________2 3.2 ROTACIN A LA IZQUIERDA_______________________3 3.3 ROTACIN DOBLE_____________________________4

1. rbol balanceadoSe dice que un rbol es balanceado cuando la diferencia de cardinalidad de los subrboles izquierdo y derecho es menor o igual a 1.

2. Definicin de rbol AVLUn rbol AVL (llamado as por las iniciales de sus inventores: Adelson-Velskii y Landis) es un rbol binario en el que para cada nodo, las alturas de sus subrboles izquierdo y derecho no difieren en ms de 1. Antes de ver una definicin ms formal analizaremos el concepto de altura de un rbol. 2.1 Definicin de altura de un rbol Sea T un rbol binario y sean Ti y Td sus subrboles, su altura H(T), es: 0 si el rbol T est vaco 1 + max(H(Ti),H(Td)) si no lo est Esta definicin de altura de un rbol nos permite la aplicacin de un algoritmo recursivo para su implementacin.int H(NODO* T) { int aux; if(T) return ( 1+max(H(Thizq),H(Thder)) ); else return 0; }

Ejemplo: Utilizando el rbol de la figura 1, definiremos: T = rbol de raz a Ti = Subrbol de raz b Td = Subrbol de raz cFigura 1

Pgina 1 de 4

rboles: AVL-Rotacin Ahora utilizaremos la funcin H(x) que nos devuelve la altura de un rbol (distancia desde la raz x hasta la hoja ms lejana). H(Ti) = 1 H(Td) = 2

Como H(Td) en mayor que H(Ti), entonces: H(T) = 1 + H(Td) = 3 2.2 Definicin formal Sea T un rbol binario con Ti y Td siendo sus subrboles izquierdo y derecho respectivamente, tenemos que: Si T es vaco, es un rbol AVL Si T es un ABB no vaco, es AVL (si y slo si): - Ti y Td son AVL y - H(Ti) - H(Td) = -1, 0 +1 (factor de equilibrio) El factor de equilibrio es la diferencia entre las alturas del rbol derecho y el izquierdo: FE = altura subrbol derecho - altura subrbol izquierdo; Por definicin, para un rbol AVL, este valor debe ser -1, 0 1.

3 RotacinCada vez que insertemos o eliminemos un nodo en un rbol AVL pueden suceder dos cosas: que el rbol se mantenga como AVL o que pierda esta propiedad. En el segundo caso debemos utilizar rotacin para poder balancear los rboles. Se puede aplicar al rbol completo o a una parte del mismo (subrbol). La rotacin puede ser aplicada en dos sentidos: hacia la derecha o hacia la izquierda. Tambin existe lo que se llama rotaciones dobles que son una combinacin de rotaciones para cuando no podemos balancear el rbol utilizando simples. 3.1 Rotacin a la derecha Se realiza cuando el FE de un nodo es menor a -1. En el caso de la figura 2a, se debe aplicar una rotacin tomando como raz a a (front). El algoritmo para realizar esto es el siguiente: aux = front hizq front hizq = aux hder aux hder = front front = aux Figura 2a

Pgina 2 de 4

rboles: AVL-Rotacin En la siguiente figura podemos ver el procedimiento y el resultado.

Figura 2b

3.2 Rotacin a la izquierda Es similar a la rotacin a la derecha. Se realiza cuando el FE de un nodo es mayor a 1. En el caso de la figura 2c, se debe aplicar una rotacin tomando como raz a a (front). El algoritmo para realizar esto es el siguiente: aux = front hder front hder = aux hizq aux hizq = front front = aux

Figura 2c

En la siguiente figura podemos ver el procedimiento y el resultado.

Figura 2d

Pgina 3 de 4

rboles: AVL-Rotacin

3.3 Rotacin doble Tomemos el caso del siguiente rbol y su respectiva rotacin que en teora solucionara el problema de balanceo.

Figura 2e

Como podemos ver, el rbol rotado sigue desequilibrado pero ahora hacia el otro lado. Esto sucedi porque el peso del subrbol derecho de b era mayor que el de su izquierdo, y este paso todo del otro lado del rbol. Para solucionar este problema mostraremos en que consiste la rotacin doble. Haremos solo la demostracin para la rotacin hacia la derecha ya que en el otro sentido es semejante. Cuando se dan estas condiciones, en la que el FE del hijo izquierdo de la raz es igual a 1 y el FE de la raz es igual a -2, lo primero que debemos hacer es realizar una rotacin hacia la izquierda del subrbol izquierdo de la raz. Una vez echo esto, rotaremos ese rbol resultante hacia la derecha. El procedimiento sera el siguiente:

Figura 2f

Pgina 4 de 4