Sunteți pe pagina 1din 16

ÁRBOLES AVL

ESTRUCTURA DE DATOS

Ing. Sergio Jiménez Martínez

1
Definición
 El nombre AVL son las iniciales de los hombres que
idearon este tipo de árbol Adelson-Velskii y Landis
en 1962.
 Básicamente un árbol AVL es un Árbol binario de
búsqueda al que se le añade una condición de
equilibrio. Esta condición es que para todo nodo la
altura de sus subárboles izquierdo y derecho pueden
diferir a lo sumo en 1.

2
FACTOR DE BALANCE

 Se define como la altura del subárbol izquierdo


menos la altura del subárbol derecho
 FB(x) = altura(x.LI) – altura (x.LD)
 Un árbol binario es un AVL si y sólo si cada uno
de sus nodos tiene un equilibrio de –1, 0, + 1
 Si alguno de los pesos de los nodos se modifica en
un valor no válido (2 o -2) debe seguirse un esquema
de rotación.
 En conclusión un árbol es AVL si:
|FB(X)| <2

3
Ejemplo de AVL
2
1
6
0
6 -1
1 2 8
-1
2 8 0
0
1 4
0 0 1
1 4
7 0
0
0 3 7
3

Sólo el árbol de la izquierda es AVL. El de la derecha viola


la condición de equilibrio en el nodo 6, ya que su subárbol
izquierdo tiene altura 3 y su subárbol derecho tiene altura 1.
4
Hallar FB e indicar si es o no AVL

5
Operaciones sobre un AVL
 Rebalancear un Arbol: Consiste en reacomodar los nodos de tal
forma que los factores de balance de todos los registro sean {-1,0,1}
 Balancear
 Caso 1 Rotación simple izquierda RSI
 Caso 2 Rotación simple derecha RSD
 Caso 3 Rotación doble izquierda RDI
 Caso 4 Rotación doble derecha RDD
 Para estas rotaciones se asume la siguiente convenciones:
 i. Sea P el registro con FB no permitido {-2, 2}
 ii. Sea Q la dirección del hijo izquierdo de P o del hijo derecho
de P

6
Implementación: Clase Nodo

Class Nodo {
int bal; //para almacenar el valor del equilibrio del nodo
int dato;
Nodo izq;
Nodo der;
}

7
Una Rotación
 Caso 1: Rotación simple izquierda RSI
FB(P)=-2
 Se efectúa si:

FB(Q)=-1

 Consiste en girar en el sentido contrario de las


manecillas del reloj P alrededor de Q

8
Una Rotación
 Caso 2: Rotación simple derecha RSD
FB(P)=2
 Se efectúa si:

FB(Q)=1
 Consiste en girar en el sentido de las manecillas del
reloj P alrededor de Q
Ejemplo 1

9
Una Rotación
Caso 2: Rotación simple derecha RSD
Ejemplo 2

10
Doble Rotación
 Para la doble rotación se asume lo siguiente:
 Sea R el registro que representa el hijo
Izquierdo o el hijo derecho de Q

C P P A

Q A C Q

B R R B

11
Doble Rotación
 Caso 3: Rotación doble izquierda RDI
FB(P)=-2
 Se efectúa si:

FB(Q)=1

 Consiste en una rotación a la derecha de Q al rededor de R,


seguida de una rotación ala izquierda de P alrededor de R
 Ejemplo 1

12
Doble Rotación
 Caso 3: Rotación doble izquierda RDI
Ejemplo 2

13
Doble Rotación
 Caso 4: Rotación doble derecha RDD
 Se efectúa si: FB(P)=2

FB(Q)=-1

 Consiste en una rotación a la Izquierda de Q al rededor de


R, seguida de una rotación ala derecha de P alrededor de R
Ejemplo 1

14
Doble Rotación
 Caso 4: Rotación doble derecha RDD
Ejemplo 2

15
Demostración de AVL
 Creación , Recorridos , rotaciones y
eliminación de un nodo.
 http://cupi2.uniandes.edu.co/sitio/images/curs
osCupi2/datos/entrenadores/applets/n15ent_
avl/avl.htm

16

S-ar putea să vă placă și