Árboles AVL M.C. Meliza Contreras González. 2 ¿Qué es un árbol AVL? Es un árbol binario de...

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

Transcript of Árboles AVL M.C. Meliza Contreras González. 2 ¿Qué es un árbol AVL? Es un árbol binario de...

Page 1: Á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.

Árboles AVL

M.C. Meliza Contreras González

Page 2: Á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.

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.

Page 3: Á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.

3

Ejemplos de árboles AVL

no

no

Page 4: Á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.

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= 1 altura del derecho> izquierdo -1 altura del izquierdo> derecho

Page 5: Á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.

5

Factor de balanceo de árboles AVL

0 -

0

0

0 0

- +

-

0

0 0

0

+

0

+

Page 6: Á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.

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

Page 7: Á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.

7

Casos de balanceo después de la inserción

1. 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.

0

0 0

0 0 0 0

Nuevo nodo

0 -

0

+

0 + 0

Nuevo nodo

Page 8: Á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.

8

Casos de balanceo después de la inserción

2. 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.

+

Nuevo nodo

0 -

0 0 + 0

0

Nodo pivote0 0

0 0 + +

0

Nodo pivote

Page 9: Á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.

9

Casos de balanceo después de la inserción

3. 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.

Page 10: Á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.

10

Rotación simple izquierda

Resto del árbol

A

3

B

1 2

0

Nuevo nodo

0

Resto del árbol

B

1

A

2 3

pivote

Nuevo nodo

0

+

Los triángulos pueden ser nulos

Page 11: Á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.

11

Rotación simple derecha

Nuevo nodo

Resto del árbol

A

3

B

2 1

00

Nuevo nodo

Resto del árbol

B

1

A

3 2

pivote

0

-

Los triángulos pueden ser nulos

Page 12: Á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.

12

Rotación doble izquierda

Nuevo nodo

Nuevo nodo

Resto del árbol

B

1

A

24

pivote0

+

C

3

0

Resto del árbol

C

B

1 4

00,-

A

0,+

2 3

Los triángulos pueden ser nulos.

El nodo C puede ser el nodo a insertar

Page 13: Á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.

13

Rotación doble derecha

Resto del árbol

C

A

4 1

0

Nuevo nodo

0,-

Resto del árbol

B

1

A

34

pivote

Nuevo nodo

0

-

C

2

0B

0,+

3 2

Los triángulos pueden ser nulos.

El nodo C puede ser el nodo a insertar

Page 14: Á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.

14

Ejemplos

1. Antes de insertar hay que checar que sea un árbol AVL

2. Identificar los casos dependiendo si tiene pivote o no y en que subárbol se va a insertar.

3. Si se desbalancea hay que revisar que rotaciones aplicar

Insertar el nodo 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

12

7 21

4 9 16 25

2 8 13 19

0

0

00

0000

-

- -pivote

12

7 21

4 9 16 25

2 8 13 195

0

-

- 00

0000 0

0

0

Page 15: Á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.

15

Insertar el nodo 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

12

7 21

4 9 16 25

2 8 13 19

0

0

00

0000

-

- -

pivote 12

7 21

4 9 16 25

2 8 13 19

0

0

+0

0000

0

- -

260

Page 16: Á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.

16

Insertar el nodo 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

12

7 21

4 9 16 25

2 8 13 19

0

0

+0

0000

0

- -

260

pivote

0

12

7 21

4 9 16 25

2 8 13 19

0

0

00

000

0

- -

260

230

Page 17: Á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.

17

Insertar el nodo 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

0

12

7 21

4 9 16 25

2 8 13 19

0

0

00

0000

0

- -

26230

12

7 21

4 9 16 25

2 8 13 19

+

0

+0

0000

+

- -

26+

230

270

Page 18: Á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.

18

Insertar el nodo 28(rotación simple izquierda)

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 +) .

12

7 21

4 9 16 25

2 8 13 19

+

0

+0

0000

+

- -

26+

230

27

0

pivote

+

0

12

7 21

4 9 16 25

2 8 13 19

0

+0

000

+

- -

26+

230

270

28

pivote

En este caso los triángulos 1,2,3 son nulos.

1

0

12

7 21

4 9 16 25

2 8 13 19

0

+0

000

+

- -

26+

230

270

28

B

A

2 3

+

1

0

12

7 21

4 9 16 25

2 8 13 19

0

+0

000

+

- -

270

230

260

28

A

B2

3

+

0

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

Page 19: Á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.

19

Insertar el nodo 0(rotación simple derecha)

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 -) .

12

7 21

4 9 16 25

2 8 13 19

0

0

00

0000

-

- -pivote

En este caso los triángulos 1,2,3 son nulos.

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

12

7 21

4 9 16 25

2 8 13 19

0

0

00

0000

-

- -

0

pivote

1

12

7 21

4 9 16 25

2 8 13 19

0

0

00

0000

-

- -

0

B

A

3 2

0

1

12

7 21

2 9 16 25

4 8 13 19

0

0

00

000

-

0-

0

A

B3

2

0

Page 20: Á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.

20

Insertar el nodo 8(rotación doble derecha)

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 -) .

pivote

50

30 70

15 40 55 80

10 42 52 60

-

-

++

00

0 0

+ -

90

0

-

58 66

00

0

35

+

37

0

-

20

-

18 25

-

17

0

7

0

50

30 70

15 40 55 80

10 42 52 60

-

-

++

00

0 0

+ -

90

-

58 66

00

0

35

+

37

0

-

20

-

18 25

-

17

0

7

8 17

pivote

Page 21: Á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.

21

Insertar el nodo 8 (segunda parte)(rotación doble derecha)

En este caso los triángulos 1,2,3,4 son nulos, y el nodo C es el nodo a insertar.

0

-

B

50

30 70

15 40 55 80

10 42 52 60

-

++

00

0 0

+ -

90

-

58 66

00

0

35

+

37

0

-

20

-

18 25

-

17

0

7

8 17

A1

4 C

3 2

El nodo C en la rotación doble es el padre de A y B, ver rotación doble derecha

C

50

30 70

15 40 55 80

8 42 52 60

-

++

00

0 0

+ -

90

-

58 66

00

0

35

+

37

0

0

20

-

18 25

-

17

0

7 10

17

A

14

B

3 2

-

0

0

Page 22: Á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.

22

Insertar el nodo 36(rotación doble izquierda)

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 +) .

pivote

50

30 70

15 40 55 80

10 42 52 60

-

-

++

00

0 0

+ -

90

0

-

58 66

00

0

35

+

37

0

-

20

-

18 25

-

17

0

7

0

50

30 70

15 40 55 80

10 42 52 60

-

-

++

00

0 0

+ -

90

-

58 66

00

0

35

+

37

0

-

20

-

18 25

-

17

0

7

3617

pivote

Page 23: Á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.

23

Insertar el nodo 36 (segunda parte)(rotación doble izquierda)

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

-

0

71

32

50

30 70

15 40 55 80

10 42 52 60

-

++

00

0

+ -

90

-

58 66

00

0

35

+

37

0

-

20

-

18 25

-

17

0

36

B

A

4

C

-

0

7

1 32

50

30 70

15 40 55 80

10 42 52 60

-

++

00

0

+ -

90

-

58 66

00

0

36

0

37

0

-

20

-

18 25

-

17

0

35

C

A

4

B 0