La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

M.C. Meliza Contreras González

Presentaciones similares


Presentación del tema: "M.C. Meliza Contreras González"— Transcripción de la presentación:

1 M.C. Meliza Contreras González
Árboles AVL M.C. Meliza Contreras González

2 ¿Qué es 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 una unidad. Propuesto en 1962 por Adelson-Velskii y Landis.

3 Ejemplos de árboles AVL
no no

4 Factor de balanceo Los nodos de un árbol AVL guardan un valor entre 1 y -1, lo que se conoce como Factor de Balanceo(FB) y representa la diferencia entre las alturas de sus subárboles. 0 las alturas son iguales FB= altura del derecho> izquierdo -1 altura del izquierdo> derecho

5 Factor de balanceo de árboles AVL
- + - - +

6 Inserción de un nodo en un árbol AVL
La inserción es idéntica que en un árbol binario de búsqueda. Una vez realizada la inserción si el árbol se desbalancea se realizan: Determinación del nodo pivote: nodo con FB distinto de 0 más cercano a los ancestros del nodo insertado Rotaciones simples Rotaciones dobles

7 Casos de balanceo después de la inserción
El árbol AVL carece de nodo pivote: significa que en todos los ancestros del nuevo nodo tienen FB=0, al insertar el nodo, el árbol no se desbalancea, sólo se ajustan los valores de FB de todos los ancestros. - + Nuevo nodo Nuevo nodo

8 Casos de balanceo después de la inserción
El árbol AVL tiene nodo pivote y el nuevo nodo se inserto en el subárbol más pequeño del pivote: en este caso se igualan las alturas de los dos subárboles y no ocurre desbalanceo, sólo se ajustan los valores de FB de todos los ancestros. + - + Nodo pivote + Nodo pivote Nuevo nodo

9 Casos de balanceo después de la inserción
El árbol AVL tiene nodo pivote y el nuevo nodo se inserto en el subárbol más grande del pivote: en este caso se desbalancea el árbol a partir del pivote y hay que ocupar rotaciones.

10 Rotación simple izquierda
Resto del árbol B 1 A 2 3 pivote Nuevo nodo + Resto del árbol A 3 B 1 2 Nuevo nodo Los triángulos pueden ser nulos

11 Rotación simple derecha
Resto del árbol B 1 A 3 2 pivote - Resto del árbol A 3 B 2 1 Nuevo nodo Los triángulos pueden ser nulos Nuevo nodo

12 Rotación doble izquierda
Resto del árbol B 1 A 2 4 pivote + C 3 Resto del árbol C B 1 4 0,- A 0,+ 2 3 Los triángulos pueden ser nulos. El nodo C puede ser el nodo a insertar Nuevo nodo Nuevo nodo

13 Rotación doble derecha
Resto del árbol Resto del árbol - pivote B C 0,- 0,+ A A B 1 4 C 4 3 2 1 3 2 Los triángulos pueden ser nulos. El nodo C puede ser el nodo a insertar Nuevo nodo Nuevo nodo

14 Ejemplos Antes de insertar hay que checar que sea un árbol AVL
Identificar los casos dependiendo si tiene pivote o no y en que subárbol se va a insertar. Si se desbalancea hay que revisar que rotaciones aplicar 12 7 21 4 9 16 25 2 8 13 19 - pivote 12 7 21 4 9 16 25 2 8 13 19 5 - Caso 2: tiene pivote (nodo 4) y se inserta en el subárbol más pequeño y se actualizan los factores de balanceo de los ancestros Insertar el nodo 5

15 Insertar el nodo 26 12 7 21 4 9 16 25 2 8 13 19 - pivote 12 7 21 4 9 16 25 2 8 13 19 + - 26 Caso 2: tiene pivote (nodo 21) y se inserta en el subárbol más pequeño, en este caso no hay subárboles cuyo nodo padre sea 25 y se actualizan los factores de balanceo de los ancestros

16 Insertar el nodo 23 12 7 21 4 9 16 25 2 8 13 19 + - 26 pivote 12 7 21 4 9 16 25 2 8 13 19 - 26 23 Caso 2: tiene pivote (nodo 25) y se inserta en el subárbol más pequeño y se actualizan los factores de balanceo de los ancestros

17 Insertar el nodo 27 12 7 21 4 9 16 25 2 8 13 19 - 26 23 12 7 21 4 9 16 25 2 8 13 19 + - 26 23 27 Caso 1: no tiene pivote y se inserta como hijo derecho del nodo padre que es 26, se actualizan los factores de balanceo de los ancestros

18 Insertar el nodo 28 (rotación simple izquierda)
+ 12 7 21 4 9 16 25 2 8 13 19 - 26 23 27 28 12 7 21 4 9 16 25 2 8 13 19 + - 26 23 27 pivote pivote Caso 3: tiene pivote (nodo 26) y se desbalancea el árbol a partir del mismo, por lo que se requiere una rotación (izquierda porque el pivote es +) . 1 12 7 21 4 9 16 25 2 8 13 19 + - 27 23 26 28 A B 3 1 12 7 21 4 9 16 25 2 8 13 19 + - 26 23 27 28 B A 3 El nodo 28 es el hijo derecho del nodo 27 dado que el triángulo 3 es nulo, es decir el nodo A en la rotación se vuelve el nodo padre de B y del nodo a insertar ver rotación simple izquierda En este caso los triángulos 1,2,3 son nulos.

19 Insertar el nodo 0 (rotación simple derecha)
12 7 21 4 9 16 25 2 8 13 19 - 12 7 21 4 9 16 25 2 8 13 19 - pivote pivote Caso 3: tiene pivote (nodo 4) y se desbalancea el árbol a partir del mismo, por lo que se requiere una rotación (derecha porque el pivote es -) . 1 12 7 21 4 9 16 25 2 8 13 19 - B A 3 1 12 7 21 2 9 16 25 4 8 13 19 - A B 3 El nodo 0 es el hijo izquierdo del nodo 2 dado que el triángulo 3 es nulo, es decir el nodo A en la rotación se vuelve el nodo padre de B y del nodo a insertar ver rotación simple derecha En este caso los triángulos 1,2,3 son nulos.

20 Insertar el nodo 8 (rotación doble derecha)
pivote 50 30 70 15 40 55 80 10 42 52 60 - + 90 58 66 35 37 20 18 25 17 7 50 30 70 15 40 55 80 10 42 52 60 - + 90 58 66 35 37 20 18 25 17 7 8 pivote Caso 3: tiene pivote (nodo 10) y se desbalancea el árbol a partir del mismo, por lo que se requiere una rotación (derecha porque el pivote es -) .

21 Insertar el nodo 8 (segunda parte) (rotación doble derecha)
- B 50 30 70 15 40 55 80 10 42 52 60 + 90 58 66 35 37 20 18 25 17 7 8 A 1 4 C 3 2 C 50 30 70 15 40 55 80 8 42 52 60 - + 90 58 66 35 37 20 18 25 17 7 10 A 1 4 B 3 2 En este caso los triángulos 1,2,3,4 son nulos, y el nodo C es el nodo a insertar. El nodo C en la rotación doble es el padre de A y B, ver rotación doble derecha

22 Insertar el nodo 36 (rotación doble izquierda)
pivote 50 30 70 15 40 55 80 10 42 52 60 - + 90 58 66 35 37 20 18 25 17 7 50 30 70 15 40 55 80 10 42 52 60 - + 90 58 66 35 37 20 18 25 17 7 36 pivote Caso 3: tiene pivote (nodo 35) y se desbalancea el árbol a partir del mismo, por lo que se requiere una rotación (izquierda porque el pivote es +) .

23 Insertar el nodo 36 (segunda parte) (rotación doble izquierda)
- 7 1 3 2 50 30 70 15 40 55 80 10 42 52 60 + 90 58 66 36 37 20 18 25 17 35 C A 4 B - 7 1 3 2 50 30 70 15 40 55 80 10 42 52 60 - + 90 58 66 35 37 20 18 25 17 36 B A 4 C En este caso los triángulos 1,2,3,4 son nulos, y el nodo C es el nodo a insertar. El nodo C en la rotación doble es el padre de A y B, ver rotación doble izquierda


Descargar ppt "M.C. Meliza Contreras González"

Presentaciones similares


Anuncios Google