You are on page 1of 32

Algortmica y Estructura de Datos II

Arboles Balanceados (AVL)

INTRODUCCION

 Los AB, son eficientes en las operaciones de bsqueda, insercin y eliminacin pero que sucede cuando  El rbol crece o decrece descontroladamente, la eficiencia de la estructura de datos decae,  Una situacin critica es cuando se insertan elementos ordenados en un AB

insertar los datos 15,18,30,60


15

insertar los datos 32,11,9,4,


32

18

se crean rboles BB donde los tiempos de bsqueda son lineales (Similar al de arreglos o listas) 9

11

30

60

DEBIDO A ESTO SURGE LA IDEA DE :

ARBOLES AVL
 CUAL ES LA IDEA
 Realizar reacomodos o balanceos despus de inserciones o eliminaciones de elementos.  Se les conoce igual como arboles AVL(autores: 2 matemticos rusos G.M. Adelson-Velskii y E.M Landis).

CONCEPTO:
Es un rbol binario de bsqueda , en la cual se cumple la siguiente condicin Para todo nodo O raz del rbol la altura de los sub arboles izquierdo(sai) y derecho(sad) no deben diferir en ms de una unidad .

EJEMPLOS DE RBOLES BALANCEADOS


35 60

20

40

40

90

15

25 De altura 3

37

45

45 75

97

10

18

27

68 De altura 4

Insertar 10, 18 0 27 Es un arbol binario balanceado? Insertar 37 o 45 Que sucede?

Factor de Equilibrio
El Factor de Equilibrio (FE) o de Balance (FB) de un nodo se define como la altura del SAD menos la altura del SAI correspondiente. El Factor de Equilibrio de cada nodo en un rbol balanceado ser 1, 1 0. Si FE llegara a tomar los valores de 2 2, entonces debera reestructurarse el rbol.

Ejemplos de Arboles AVL

4 7

2 9 1

Ejemplos de Arboles que no son AVL

Construccin de rboles AVL


Cuando se inserta un elemento a un rbol AVL, se verifica si los diferentes nodos de la rama del rbol donde se insert cumplen con la propiedad de los rboles AVL. En caso de que hubiese algn nodo que no cumpliese con la propiedad, se balancea el nodo. Para balancear un nodo se efecta una rotacin
9

Rotacin en rboles AVL


La rotacin implica reacomodar los nodos del rbol, sin destruir la propiedad de que los objetos del sub rbol izquierdo son menores al objeto raz y el objeto raz es menor a los objetos del sub rbol derecho. La rotacin se puede realizar de izquierda a derecha o de derecha a izquierda.
n2

n1
n2

n1
S3 S1

S1

S2

S2

S3

En este rbol se cumple: S1 < n1 < S2 < n2 < S3

Despus de la rotacin se sigue cumpliendo: S1 < n1 < S2 < n2 < S3 10 Notar que los nodos que rotan son el n1 y n2, y se reordena S2

Ejemplo de Rotacin en rboles AVL

Se tiene el siguiente rbol AVL. La altura de los hijos izquierdo y derecho en todos los nodos difieren a lo sumo en 1. Agreguemos el elemento 3 Al verificar si los nodos de la rama cumplen con la propiedad AVL, se determina que la raz no est desbalanceada. Se efecta la rotacin con los dos ltimos nodos de la rama involucrada en el desbalance.
6

No est Balanceado

Est Balanceado 8 Rotacin izquierda 2 Est Balanceado 5


4 3

11 Notar que los nodos que rotan son el 4 y 6, y se reubica el nodo 5

Construccin de un rbol AVL


Cada vez que se inserta un nodo, se debe verificar que cumplan con la propiedad AVL todos los ancestros de este nodo hasta llegar a la raz. Este proceso de verificacin describe una trayectoria desde el nodo insertado hasta la raz.
6

No est Balanceado

Est Balanceado 8

5 2 Est Balanceado 3

Cuando en la trayectoria se encuentra un nodo desbalanceado, se procede a su balanceo mediante12 una rotacin.

Construccin de un rbol AVL


Para efectuar la rotacin se debe considerar los tres ltimos nodos en la trayectoria de verificacin, en funcin de estos 3 nodos se determina si corresponde una rotacin izquierda o una rotacin derecha.

Se debe efectuar una rotacin Izquierda

13

Se debe efectuar una rotacin derecha

Ejemplo de construccin de un rbol AVL


Construir un rbol AVL con los siguientes datos:
1 2 3 4 5 6 7

2 1

No est Balanceado
2

Rotacin derecha
3

14

Ejemplo de construccin de un rbol AVL


Construir un rbol AVL con los siguientes datos:
1 2 3 4 5 6 7

No est Balanceado
4

Rotacin derecha

15

Ejemplo de construccin de un rbol AVL


Construir un rbol AVL con los siguientes datos:
1 2 3 4 5 6 7
4

No est Balanceado
4 2

Rotacin derecha
6

16

Ejemplo de construccin de un rbol AVL


Construir un rbol AVL con los siguientes datos:
1 2
4

7
4

No est Balanceado
6

Rotacin derecha

17

Ejemplo de construccin de un rbol AVL


Agregar los siguientes datos al rbol
1 2 3 4 5 6
4

15

14

13

12

11

10

No est Balanceado
15

14

Considerando los tres ltimos nodos en la trayectoria de la verificacin del desbalance, una rotacin simple no soluciona el desbalance. 18 En estos casos corresponde hacer una doble rotacin.

(Rotacin doble )
Considerando los tres ltimos nodos en la trayectoria de verificacin, si stos no estn el lnea recta, entonces se debe efectuar una rotacin doble.

Rotacin Izquierda

Rotacin Derecha

Rotacin Derecha

Rotacin Izquierda

19

(Resumen de tipos de rotacin


Rotacin Simple Izquierda

Rotacin Simple Derecha

Rotacin Doble Izquierda (Derecha e Izquierda)

Rotacin doble Derecha (Izquierda y Derecha)

20

Regresando al ejemplo
1 2 3 4 5 6 7 15 14 13
4

12

11

10

Rotacin Doble Derecha


6

15

14

15

Rotacin Simple Derecha


2

15 4

14 6

15

14

21

15

Continuando con el ejemplo


1 2 3 4 5 6 7 15
13 14 13

12
4

11

10

Rotacin Simple Izquierda


6

2 4 1 2 6 15 5

No est Balanceado
14 14

15

Rotacin Simple Derecha


2

13 4

15

13 1 15 6 14

22

13

15

Continuando con el ejemplo


1 2 3 4 5 6 7 15 14 13 12 11 10 9 8

No est Balanceado
Rotacin derecha
2 14 1 5 13 15 3 5 4

14

13

15

12

12

23

Continuando con el ejemplo


1 2 3 4 5 6 7 15 14 13 12 11 10 9 8

14

Rotacin izquierda

14

13

2 15 No est Balanceado

12

15

12

11

13

11

24

Continuando con el ejemplo


1 2 3 4 5 6 7 15 14 13 12 11 10 9 8

14

Rotacin No est Balanceado 4 izquierda


15 2 6 11

12

12

14

11

13

1 0

13

15

1 0

25

Continuando con el ejemplo


1 2 3 4 5 6 7 15 14 13 12 11 10 9 8

12

Rotacin izquierda

12

11

2 14 No est Balanceado

1 0 9 11 13

14

1 0 9

13

15

15

26

Continuando con el ejemplo


1 2 3 4 5 6 7 15 14 13 12 11 10 9 8

12

1 0 9 11 13

14

15

27

Implementacin
public class CArbolAVL : CArbolBB { //=========== Constructores ================== public CArbolAVL() : base() { } /* ----------------------------------------- */ public CArbolAVL( CArbolBB pSubArbolIzq, Object pRaiz, CArbolBB pSubArbolDer) : base(pSubArbolIzq, pRaiz, pSubArbolDer) { }

28

//============ Metodos =============== private bool EstaBalanceado() { int Altura1 = (SubArbolIzq==null ? 0 : 1+SubArbolIzq.Altura()); int Altura2 = (SubArbolDer==null ? 0 : 1+SubArbolDer.Altura()); return (Math.Abs(Altura1-Altura2)<2); } /* ------------------------------------------- */ protected void RotacionSimpleIzq() { // La rotacin se efectuara primero creando un nuevo arbol y // reordenando los enlaces de los arboles SubArbolDer = new CArbolAVL(SubArbolIzq.SubArbolDer, Raiz,SubArbolDer); Raiz = SubArbolIzq.Raiz; SubArbolIzq = SubArbolIzq.SubArbolIzq; }
29

/* -------------------------------------------- */ protected void RotacionDobleIzq() { ((CArbolAVL)SubArbolIzq).RotacionSimpleDer(); RotacionSimpleIzq(); } /* -------------------------------------------- */ protected void RotacionSimpleDer() { // La rotacin se efectuara primero creando un nuevo arbol y // reordenando los enlaces de los arboles SubArbolIzq = new CArbolAVL(SubArbolIzq,Raiz, SubArbolDer.SubArbolIzq); Raiz = SubArbolDer.Raiz; SubArbolDer = SubArbolDer.SubArbolDer; }
30

/* -------------------------------------------- */ protected void RotacionDobleDer() { ((CArbolAVL)SubArbolDer).RotacionSimpleIzq(); RotacionSimpleDer(); } /* -------------------------------------------- */ public override void Agregar(object Elemento) { if (Raiz == null) Raiz = Elemento; else //agregar en alguno de los hijos

31

if (Elemento.ToString().CompareTo(Raiz.ToString())<0) { // Agregar el nuevo elemento como hijo Izq if (SubArbolIzq == null) SubArbolIzq= CArbolAVL.CrearAVL(null,Elemento,null); else SubArbolIzq.Agregar(Elemento); // Balancear arbol si esta desbalanceado if (!EstaBalanceado()) if (Elemento.ToString().CompareTo (SubArbolIzq.Raiz.ToString())<0) RotacionSimpleIzq(); else RotacionDobleIzq(); } FALTA, DEBE COMPLETAR USTED }
32

You might also like