Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de...

126
1 Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 5: Árboles Prof. Montserrat Serrano Montero

Transcript of Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de...

Page 1: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

1

Universidad de ValladolidDepartamento de informática

Campus de Segovia

Estructura de datosTema 5: Árboles

Prof. Montserrat Serrano Montero

Page 2: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

2

ÍNDICE

Primera parte:• Conceptos básicos• TAD Árbol binario• TAD Árbol de búsqueda

Page 3: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

3

CONCEPTOS BÁSICOS• Árbol: Estructura no lineal que organiza sus

elementos formando jerarquías.

• Nodo: Elemento del árbol.• Árbol: Se define formalmente como una

estructura finita formada por un nodo al cual están conectados ninguno, uno o más árboles disjuntos (no comparten elementos). Definición recursiva: lo definido se encuentra dentro de la definición.

Page 4: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

4

CONCEPTOS BÁSICOS• Bosque: Conjunto de dos o más árboles.• Subárbol: Subconjunto de elementos de un

árbol con estructura de árbol.• Raíz: Nodo superior de un árbol. Al nodo raíz

se le asocia el nivel 1. Nivel cero para el árbol vacío.

• Si existe una arista (rama) dirigida del nodo n al nodo m, entonces n es el padre o ascendiente directo de m y m es un hijo o descendiente directo de n. Los hijos del mismo padre son hermanos.

• Un nodo que no tiene hijos se llama hoja del árbol. Nodo terminal.

• Nodo interior o rama: Tiene descendientes.

Page 5: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

5

CONCEPTOS BÁSICOS

• Camino: Secuencia de nodos conectados dentro de un árbol.

• Nodo ascendiente y descendiente: n es antecesor de m si existe un camino de n a m y en este caso, m es descendiente de n.

• Longitud del camino: Número de nodos menos uno (r-1). (5-1) en el ej.

Page 6: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

6

CONCEPTOS BÁSICOS• Nivel de un nodo: La longitud del camino

desde el nodo raíz al nodo considerado, más uno.

• Altura o profundidad de un árbol: El nivel más alto del árbol (o nivel máximo de los nodos de un árbol).

• Grado (aridad): Número de hijos de un nodo. El grado de un árbol se define como el máximo del grado de sus nodos.Árbol ternario: Árbol de grado 3.Un árbol unario sería un árbol de grado 1. A este árbol se le llama lista (árbol degenerado)

• El máximo número de nodos de un árbol de altura “h” y grado “g” sería:1 + g + g2 + g3 +...+ gh-1 = ∑ gi ; 0 ≤ i ≤ (h -1)

Page 7: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

7

CONCEPTOS BÁSICOS

• Representación de árboles:a) Grafo

b) Jerarquía de márgenes

c) Conjuntos incluidos

d) Listas incluidas

Page 8: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

8

TAD ÁRBOL BINARIO• Árbol binario: Árbol de grado 2. De cada

nodo parten como máximo dos subárboles disjuntos (izquierdo y derecho). También puede estar vacío.

ESPECIFICACIÓN INFORMAL:TAD ArbolB (VALORES: rango del problema;

OPERACIONES: Inicia, EsVacio, Insertar, Suprimir, Izquierdo, Derecho, Raiz);

Inicia ( ) → ArbolBEfecto: Crea un árbol binario vacío y lo deja en disposición de ser utilizado.

EsVacio (ArbolB) → BooleanEfecto: Devuelve true si el árbol binario es vacío y false en caso contrario.

Page 9: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

9

TAD ÁRBOL BINARIOInsertar (ArbolB, Elemento) → ArbolB

Efecto: Introduce en el ArbolB un nuevo nodo cuyo valor está dado por el Elemento pasado.

Excepción: Árbol lleno en implementa. estática.Suprimir (ArbolB, Elemento) → ArbolB

Efecto: Borra del árbol binario el nodo cuyo valor coincide con el que se pasa en Elemento, si éste existe.

Excepción: Error si el árbol binario está vacío.Izquierdo (ArbolB) → ArbolB

Efecto: Devuelve el hijo izquierdo del árbol binario pasado como entrada.

Excepción: Error si el árbol binario está vacío.Derecho (ArbolB) → ArbolB

Efecto: Devuelve el hijo derecho del árbol binario pasado como entrada.

Excepción: Error si el árbol binario está vacío.Raiz (ArbolB) → Elemento

Efecto: Devuelve el Elemento contenido en el nodo raíz del árbol binario pasado como entrada.

Excepción: Error si el árbol binario está vacío.

Page 10: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

10

DECLARACIÓN DE TIPOS• Con arrays: constMaxNodos = ...;

typeindice = 0..MaxNodos; {máx nº de nodos}tInfo = ...; {depende del problema}tNodo = record

info: tInfo;iz: indice;de: indice;

end;tArbol = record

raiz: indice; (1)libre: indice; (6)nodos: array [1..MaxNodos] of tNodo;

end;

Page 11: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

11

DECLARACIÓN DE TIPOS• Con punteros: (seguir con esta implementación)tInfo = ...; {depende del problema}tArbol = ^Nodo;Nodo = record

info: tInfo;iz, de: tArbol

end;

Page 12: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

12

ALGORITMOS BÁSICOSprocedure Inicia (var ArbolB: tArbol);begin

ArbolB:= nilend;

function EsVacio (ArbolB: tArbol): boolean;begin

EsVacio:= (ArbolB = nil)end;

function Izquierdo (ArbolB: tArbol): tArbol;begin

if not EsVacio (ArbolB) then Izquierdo:= ArbolB^.izelse writeln (‘El árbol está vacío’)

end;function Derecho (ArbolB: tArbol): tArbol;begin

if not EsVacio (ArbolB) then Derecho:= ArbolB^.deelse writeln (‘El árbol está vacío’)

end;procedure Raiz (ArbolB: tArbol; var Elemento: tInfo);

beginif not EsVacio (ArbolB) then Elemento:= ArbolB^.infoelse writeln (‘El árbol está vacío’)

end;

Page 13: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

13

ALGORITMOS DE RECORRIDO• Utilizados para visualizar o consultar datos

almacenados en un árbol.

• Métodos:a) En profundidad: Recorre el árbol por subárboles.

1. Enorden2. Preorden3. Postorden

b) En amplitud: Recorre el árbol por niveles.

• Los métodos en profundidad pueden implementarse de forma recursiva e iterativa. La forma iterativa requiere utilizar una pila.

• El recorrido en amplitud se implementa de forma iterativa con ayuda de una cola como estructura de datos auxiliar.

• Aplicación de estos algoritmos: acceso a datos de almacenamiento en memoria secundaria.

Page 14: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

14

ALGORITMOS DE RECORRIDO• Recorrido recursivo enorden (IND):

1. Recorrer el subárbol izquierdo (I)2. Visitar el nodo raíz (N)3. Recorrer el subárbol derecho (D).

procedure enorden (Arbol: tArbol);beginif Arbol <> nil thenbeginenorden (Arbol^.iz);write (Arbol^.info, ‘- ‘);enorden (Arbol^.de)

endend;

1

2 3

4 5 6 7

Resultado: 4-2-5-1-6-3-7

Page 15: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

15

ALGORITMOS DE RECORRIDO• Recorrido recursivo preorden (NID):

1. Visitar el nodo raíz (N) 2. Recorrer el subárbol izquierdo (I).3. Recorrer el subárbol derecho (D).

procedure preorden (Arbol: tArbol);beginif Arbol <> nil thenbegin

write (Arbol^.info, ‘- ‘);preorden (Arbol^.iz);preorden (Arbol^.de)

endend;

1

2

6 7

3

4 5

Resultado: 1-2-4-5-3-6-7

Page 16: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

16

ALGORITMOS DE RECORRIDO• Recorrido recursivo postorden (IDN):

1. Recorrer el subárbol izquierdo (I).2. Recorrer el subárbol derecho (D).3. Visitar el nodo raíz (N).

procedure postorden (Arbol: tArbol);beginif Arbol <> nil thenbeginpostorden (Arbol^.iz);postorden (Arbol^.de);write (Arbol^.info, ‘ - ‘)

endend;

1

2

6

3

4 5 7

Resultado: 4-5-2-6-7-3-1

Page 17: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

17

ALGORITMOS DE RECORRIDO• Hay otras posibles combinaciones,

considerando recorrido primero el subárbol derecho: 1. Enorden: DNI2. Preorden: NDI3. Postorden: DIN

• Ejemplo. Deducir los tres recorridos en profundidad del árbol binario siguiente:

B

H I J

E

A

F G

C

D

Enorden: H-D-I-B-J-E-A-F-C-GPreorden: A-B-D-H-I-E-J-C-F-GPostorden: H-I-D-J-E-B-F-G-C-A

7-3-6-1-5-2-41-3-7-6-2-5-47-6-3-5-4-2-1

Page 18: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

ALGORITMOS DE RECORRIDO

18

• Recorrido iterativo en amplitud:1. Tomar el puntero a la raíz y ponerlo en la cola.2. Quitar el primer elemento de la cola, mostrar el contenido del nodo y almacenar en la cola los punteros correspondientes a sus hijos izquierdo y derecho.3. Repetir el paso 2.

procedure amplitud (Arbol: tArbol);var A: tArbol; cola: tCola;beginInicia (cola);A:= Arbol;if A<>nil then Encolar (cola, A);while not EsVacia (cola) dobegin

Desencolar (cola, A);write (A^.info, ‘ – ‘);if A^.iz <> nil then Encolar (cola, A^.iz);if A^.de <> nil then Encolar (cola, A^.de)end

end;

Page 19: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

19

ALGORITMOS DE RECORRIDO• Recorrido iterativo enorden (IND):

Se utiliza una pila donde almacenar punteros a los distintos nodos del árbol.

1. Se van colocando en la pila punteros, a la raíz y los sucesivos hijos izquierdos de cada nodo.

2. Recupera de la pila y escribe 1. Como 1 no tiene hijo derecho, recupera de la pila y escribe 4. El hijo derecho de 4 es 6. Pone en la pila el puntero a 6.

3. Se recupera de la pila y se escribe el 6. Como no tiene hijo derecho, se pasa a recuperar de la pila y a escribir el 8. El 8 tiene un hijo derecho, que se coloca en la pila. Después se coloca en la pila el hijo izquierdo de 12 que será el que se recupere a continuación.

Page 20: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

20

ALGORITMOS DE RECORRIDO• Recorrido iterativo enorden (IND):

procedure enorden (Arbol: tArbol);var A: tArbol; P: tPila;begin

Inicia (P);A := Arbol;repeat

while A <> nil dobegin

Apilar (P, A); A := A^.iz

end;if not EsVacia (P) thenbegin

Cima (P, A);Desapilar (P);write (A^.info, ‘ – ‘);A := A^.de

end;until EsVacia (P) and EsVacio (A)

end;

Page 21: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

21

ÁRBOLES DE EXPRESIÓN

• Los árboles binarios se utilizan para almacenar expresiones aritméticas en memoria, esencialmente en compiladores de lenguajes de programación.

• Los paréntesis no se almacenan en el árbol pero están implicados en la forma del árbol.

(A + B) * C A + B * C

Page 22: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

22

ÁRBOLES DE EXPRESIÓN

• Ejemplo 1: Deducir las expresiones que representan los siguientes árboles binarios.

Solución:a) X * (Y / - Z)b) A + [ (B * - (C + D)]c) [A * ( X + Y)] * C

• Ejemplo 2: Dibujar la representación en árbol binario de cada una de las siguientes expresiones:a) X * Y / [ (A + B) * C ]b) (X * Y / A) + (B * C)

Page 23: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

23

ÁRBOLES BINARIOS DE BÚSQUEDA

• Árbol binario de búsqueda: Árbol binario ordenado. El valor en el nodo raíz es mayor que todos los del subárbol izquierdo y menor que todos los del subárbol derecho.

• Si recorremos el árbol enorden, está ordenado.• Las operaciones básicas sobre este tipo de

árboles binarios son:a) Búsquedab) Inserciónc) Borradod) Recorridos

Page 24: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

24

ESPECIFICACIÓN• TAD Árbol binario de búsqueda:

Busqueda (ABB, Clave) → ABBEfecto: Devuelve el valor de una referencia al nodo que tiene la clave buscada y nil si la clave no está en el árbol.

Insertar (ABB, Clave) → ABBEfecto: Introduce en el árbol como nodo hoja, la clave pasada como valor de entrada.

Suprimir (ABB, Clave) → ABBEfecto: Borra del árbol binario el elemento pasado como entrada, si éste existe.

Excepción: Error si el árbol binario está vacío.

Page 25: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

25

IMPLEMENTACIÓN• Operación Búsqueda:

function Busqueda (ABB: tArbol; Clave: tInfo): tArbol;

beginif ABB = nil then Busqueda := nilelse

if ABB^.info = Clave thenBusqueda := ABB

elseif ABB^.info > Clave thenBusqueda := Busqueda (ABB^.iz, Clave)

elseBusqueda := Busqueda (ABB^.de, Clave)

end;

Page 26: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

26

IMPLEMENTACIÓN

• Operación Insertar:

• Pasos a seguir:1. Asignar memoria para un nuevo nodo.2. Buscar en el árbol para encontrar la posición de inserción del nuevo nodo, que se colocarácomo nodo hoja. 3. Enlazar el nuevo nodo al árbol.

• Ej: Tenemos que almacenar los números 8 3 1 20 1 10 5 4

Para insertar 8, la única elección es insertar 8 en el nodo raíz:

Como 3 < 8, 3 va en el subárbol izquierdo.

Page 27: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

27

IMPLEMENTACIÓN• Operación Insertar:El 1 irá a la izquierda y debajo de 3:

20 debe ir a la derecha de 8Los restantes elementos se sitúan de la misma forma:

Page 28: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

28

IMPLEMENTACIÓN• Operación Insertar:

procedure Insertar (var ABB: tArbol; Clave: tInfo);var N: tArbol;begin

if ABB = nil thenbeginnew (N);N^.info := Clave;N^.iz := nil;N^.de := nil;ABB := N;

endelse if ABB^.info > Clave then {Clave menor}

Insertar (ABB^.iz, Clave) {Izquierda}elseif ABB^.info < Clave thenInsertar (ABB^.de, Clave) {Derecha}

end;

Crea el nodo cuando se llega a una posición hoja

Page 29: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

29

IMPLEMENTACIÓN• Operación Suprimir: Compleja, ya que el

nodo a suprimir puede ser cualquiera y la operación de supresión debe mantener la estructura del ABB.

• Se pueden presentar 3 casos con tratamientos diferentes:1. El nodo a borrar es un nodo hoja.

- Se borra el nodo.2. El nodo a borrar sólo tiene un descendiente.

- Se puentea el nodo.3. El nodo a borrar es normal, es decir, tiene los dos nodos hijos: (2 alternativas)

a) Reemplazar la clave a eliminar por la mayor de las claves menores.b) Reemplazar la clave a eliminar por la menor de las claves mayores.

• Implementamos con un ejemplo el caso 3, alternativa a).

Page 30: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

30

IMPLEMENTACIÓN

• Se quiere borrar la clave 20. Pasos a seguir:1. Situarse en el nodo raíz del subárbol izquierdo del nodo a borrar.2. Se desciende por la derecha hasta encontrar un nodo N sin descendiente derecho.3. Se traslada la clave del nodo N al nodo a borrar.4. Se borra el nodo N.

Page 31: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

31

IMPLEMENTACIÓN

• Árbol resultante, una vez borrada la clave 20.

• Es un árbol de búsqueda:1, 5, 10, 12, 15, 17, 18, 22, 24, 30, 35

Page 32: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

32

IMPLEMENTACIÓN• Operación Suprimir:

procedure Suprimir (var ABB: tArbol; Clave: tInfo);var N: tArbol;beginif ABB < > nil then

if ABB^.info > Clave then {Clave menor}Suprimir (ABB^.iz, Clave)

else if ABB^.info < Clave then {Clave mayor}Suprimir (ABB^.de, Clave)

else {Clave encontrada}beginN := ABB;{Puntero aux al nodo a borrar}if ABB^.iz = nil then {Comprueba 2ABB := ABB^.de descendientes}

else if ABB^.de = nil thenABB := ABB^.izelse Borra2hijos (ABB^.iz); {Se toma el

dispose (N) nodo izq a la claveend que se quiere borrar}

end;

procedure Borra2hijos (var ABB: tArbol);

Page 33: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

33

IMPLEMENTACIÓN• Operación Suprimir:

procedure Borra2hijos (var ABB: tArbol);beginif ABB^.de < > nil then {Se desciende por laBorra2hijos (ABB^.de) derecha hasta nodo

else hoja derecha}begin{Se cambia la información de la clave aborrar por la mayor de las claves menores}N^.info := ABB^.info;{Puntero auxiliar al nuevo nodo a borrar}N := ABB;{Se enlaza al árbol el posible nodo izquierdodel nuevo a borrar}ABB := ABB^.iz

endend;

Page 34: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

34

INTERÉS DE LOS ABB

• El esfuerzo para localizar un elemento es menor que en una lista.

• El nº de comparaciones, como máximo en un ABB, es el nº de niveles del árbol, que es más pequeño cuanto más completo sea el árbol.

• Dada una estructura con n elementos:1. En una lista habrá que hacer una media

de n/2 comparaciones.2. En un ABB habrá que hacer 2k-1

comparaciones siendo k la altura del árbol.n = 2k-1; 2k-1=2*log2(n+1)-1

Page 35: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

35

Estructura de datosTema 5: Árboles equilibrados

Prof. Montserrat Serrano Montero

Universidad de ValladolidDepartamento de informática

Campus de Segovia

Page 36: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

36

Nadie que no haya cometido nunca un error ha intentado nunca algo nuevo.

Einstein

ÍNDICE

Segunda parte:• Conceptos básicos• Buscando el equilibrio.• Diseño e implementaciónde árboles AVL

Page 37: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

37

INTERÉS DE LOS ÁRBOLES DE BÚSQUEDA

• Optimizar el proceso de búsqueda.

En el caso de un árbol binario ordenadohabrá que hacer un máximo de k comparaciones para encontrar el elemento buscado, siendo k la altura del árbol.En el caso más favorable, el árbol binario estácompleto. Así, el número máximo de elementos que puede tener un árbol binario de altura h es:

nmax = 1 + 2 + 4 + 8 + ...+ 2 k-1 = 2k –1k = log2(nmax + 1)

Page 38: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

38

CONCEPTOS BÁSICOS

• Si los elementos se añaden en el árbol según el algoritmo de inserción visto para los ABB, la estructura resultante del árbol dependerádel orden en que sean añadidos.

• Si todos los elementos se insertan en orden creciente o decreciente, el árbol va a tener todas sus ramas izquierda o derecha, respectivamente, vacías.

• La búsqueda en estos árboles será totalmente secuencial. Comparaciones: O (n)

Page 39: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

39

CONCEPTOS BÁSICOS

• La idea asociada a la eficiencia en la búsqueda de un elemento es la de árbol equilibrado.

• Intuitivamente quiere decir que “una rama del árbol no sea mucho más larga que otra”, “que el número de niveles no sea demasiado grande para el número de nodos existentes”, “que no haya desproporción de elementos de una rama con respecto a otra”.

Page 40: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

40

CONCEPTOS BÁSICOS• Un árbol binario lleno de altura h tiene todas

sus hojas a nivel h y todos los nodos que están a nivel menor que h tiene cada uno dos hijos.

• Un árbol binario completo de altura h es un árbol binario que está relleno a partir del nivel h-1, con el nivel h relleno de izquierda a derecha.

• Un árbol binario lleno, es completo.

Page 41: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

41

CONCEPTOS BÁSICOS• Un árbol perfectamente equilibrado es un

árbol binario en el que para todo nodo, el número de nodos en el subárbol izquierdo y el número de nodos en el subárbol derecho difieren como mucho en una unidad.

• Un árbol equilibrado en sentido AVL(Adelson-Velskii y Landis, 1962) es un árbol binario en el que la diferencia de alturas de los subárboles izquierdo y derecho correspondientes a cualquier nodo del árbol no es superior a uno.

Page 42: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

42

CONCEPTOS BÁSICOS

• Un árbol binario completo es un árbol equilibrado, mientras que un árbol binario lleno es totalmente equilibrado.

En la figura:a) Árbol equilibrado AVLb) Árbol totalmente equilibradoc) y d) Árboles no equilibrados

Page 43: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

43

CONCEPTOS BÁSICOS

• Un árbol binario de búsqueda va perdiendo o ganando equilibrio al insertar o suprimir elementos.

• Ejemplo:

Árbol binario de búsqueda equilibrado.Árbol perfectamente equilibrado, tras insertar 10.Árbol totalmente equilibrado, tras insertar 14.Árbol lleno.

Page 44: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

44

ÁRBOL BINARIO EQUILIBRADO (AVL)

• La altura o profundidad de un árbol binario es el nivel máximo de sus hojas. La altura de un árbol nulo se considera cero.

• El factor de equilibrio o balance de un nodo se define como la altura del subárbol derecho menos la altura del subárbol izquierdo correspondiente.

• El factor de equilibrio de cada nodo en un árbol equilibrado será 1, -1 ó 0.

Page 45: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

45

BUSCANDO EL EQUILIBRIO• Los algoritmos de inserción y borrado de los

ABB no garantizan que la estructura resultante sea equilibrada en sentido AVL.

• Es necesario definir otras operaciones auxiliares que se van a utilizar para garantizar que estas inserciones y supresiones sean equilibradas.

• Estas operaciones o manipulaciones se denominan rotaciones de nodos.

• Existen dos tipos de rotaciones de nodos:A) Simples: Izquierda y derecha.B) Dobles: Sucesiones de dos simples.

Page 46: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

46

BUSCANDO EL EQUILIBRIO• ROTACIÓN SIMPLE IZQUIERDA:

A1 < A < A2 < B < A3

• Ejemplo:

Page 47: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

47

BUSCANDO EL EQUILIBRIO• ROTACIÓN SIMPLE DERECHA:

A1 < A < A2 < B < A3

• Ejemplo:

• Construir el ABB mediante la inserción de los elementos 1, 2, 3, 4, 5, 6 y 7 de forma que quede equilibrado AVL.

Page 48: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

48

BUSCANDO EL EQUILIBRIO• ROTACIÓN DOBLE IZQUIERDA-DERECHA:

• Ejemplo:

Page 49: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

49

BUSCANDO EL EQUILIBRIO• ROTACIÓN DOBLE DERECHA-IZQUIERDA:

• Ejemplo:

.

Page 50: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

50

Diseño e implementaciónde árboles AVL

• DECLARACIÓN DE TIPOS:• Añadimos al tipo de datos que representa

cada nodo un campo más: el factor de equilibrio (fe).

typetInfo = ...;tArbolE = ^NodoAE;NodoAE = record

Info: tInfo;Fe: -1..1;Iz, De: tArbolE

end;

Page 51: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

51

INSERCIÓN EN AVL• Se quiere insertar un nodo en un árbol

equilibrado en sentido AVL de raíz R y subárboles izquierdo I y derecho D.

• Supóngase que se inserta en I aumentando su altura. Esta inserción puede dar lugar a tres situaciones distintas:

Caso A:• hI = hD Tras la inserción se conserva el

equilibrio. No es necesario realizar ninguna operación para restaurar el equilibrio.

Page 52: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

52

INSERCIÓN EN AVLCaso B:• hI < hD Tras la inserción, ambos subárboles

tienen la misma altura. Se mejora la condición de equilibrio del árbol.

Caso C:• hI > hD Tras la inserción, la diferencia de

alturas entre los subárboles es mayor que la unidad. El árbol se desequilibra y hay que hacer rotaciones para que siga siendo AVL.Dos subcasos:1. Inserción de un nodo menor que el raíz de I.2. Inserción de un nodo mayor que el raíz de I.

Page 53: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

INSERCIÓN EN AVLCaso C: Ejemplo

1. Se produce al insertar un nodo de clave 1 ó 3. Este índice es menor que el nodo raíz del subárbol izquierdo (4). La rotación a llevar a cabo para reequilibrar el árbol sería una rotación simple izquierda sobre el nodo raíz del árbol desequilibrado: el 8.

53

2. Se produce al insertar un nodo de clave 5 ó 7. Este índice es mayor que el nodo raíz del subárbol izquierdo (4). La rotación a llevar a cabo sería una rotación doble izquierda-derecha sobre el nodo raíz del árbol desequilibrado.

Page 54: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

54

Diseño e implementaciónde árboles AVL

• INSERCIÓN: (tratamiento rotaciones)• Inserción de las claves 68, 45, 29:

• Movimiento de los punteros: Rotación I

(1) n^.iz := n1^.de;(2) n1^.de := n;(3) n := n1

nil(1)

Page 55: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

55

Diseño e implementaciónde árboles AVL

• INSERCIÓN: (tratamiento rotaciones)• Inserción de las claves 75 y 90:

• Movimiento de los punteros: Rotación D

(1) n^.de := n1^.iz;(2) n1^.iz := n;(3) n := n1

nil(1)

Page 56: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

56

Diseño e implementaciónde árboles AVL

• INSERCIÓN: (tratamiento rotaciones)• Inserción de la clave 70:

• Movimiento de los punteros: Rotación DI

(1) n1^.iz := n2^.de;(2) n2^.de := n1;(3) n^.de := n2^.iz;(4) n2^.iz := n;(5) n := n2

(3)

nil

Page 57: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

57

Diseño e implementaciónde árboles AVL

• INSERCIÓN: (tratamiento rotaciones)• Inserción de la clave 34:

• Movimiento de los punteros: Rotación ID

(1) n1^.de := n2^.iz;(2) n2^.iz := n1;(3) n^.iz := n2^.de;(4) n2^.de := n;(5) n := n2 (3)

nil(1)

nil

Page 58: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

58

Diseño e implementaciónde árboles AVL

• INSERCIÓN:function EsVacio (R: tArbolE): boolean;beginEsVacio:= (R = nil)

end;

function Crear (Clave: tInfo): tArbolE;var n: tArbolE;beginnew (n);with n^ dobegin

info:= Clave;iz := nil;de := nil;fe := 0 {propio de un nodo hoja}

end;Crear := n

end;

Page 59: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

Diseño e implementaciónde árboles AVL

59

• INSERCIÓN:

procedure rsi (var n: tArbolE; n1: tArbolE);begin(1) n^.iz := n1^.de;(2) n1^.de := n;if n1^.fe = -1 thenbegin{Si la rotación es por inserción se cumple}

n^.fe := 0;n1^.fe := 0

endelse begin {n1^.fe=0}

n^.fe := -1;n1^.fe := 1

end;(3) n := n1;end;

Los factores de equilibrio se incrementan en uno si se fue por la rama derecha, se decrementa en 1 si se fue por la rama izquierda.

Ajuste del factor de equilibrio

Page 60: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

60

Diseño e implementaciónde árboles AVL

• INSERCIÓN:

procedure rdid (var n: tArbolE; n1: tArbolE);var n2: tArbolEbeginn2 := n1^.de;(3) n^.iz := n2^.de;(4) n2^.de := n;(1) n1^.de := n2^.iz;(2) n2^.iz := n1;if (n2^.fe = 1) then n1^.fe := -1else n1^.fe := 0;if (n2^.fe = -1) then n^.fe :=1else n^.fe := 0;n2^.fe := 0;(5) n := n2;

end;

Ajuste del factor de equilibrio

Page 61: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

61

Diseño e implementaciónde árboles AVL

• INSERCIÓN:

procedure rsd (var n: tArbolE; n1: tArbolE);begin(1) n^.de := n1^.iz;(2) n1^.iz := n;if n1^.fe = 1 thenbegin {Si la rotación es por

inserción se cumple}n^.fe := 0;n1^.fe := 0

endelse begin {n1^.fe=0}n^.fe := 1;n1^.fe := -1

end;(3) n := n1;

end;

Ajuste del factor de equilibrio

Page 62: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

62

Diseño e implementaciónde árboles AVL

• INSERCIÓN:

procedure rddi (var n: tArbolE; n1: tArbolE);var n2: tArbolEbeginn2 := n1^.iz;(3) n^.de := n2^.iz;(4) n2^.iz := n;(1) n1^.iz := n2^.de;(2) n2^.de := n1;if (n2^.fe = 1) then n^.fe := -1else n^.fe := 0;if (n2^.fe = -1) then n1^.fe :=1else n1^.fe := 0;n2^.fe := 0;(5) n := n2;

end;

Page 63: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

63

Diseño e implementación de árboles AVL• INSERCIÓN:

procedure InsertarE (var r: tArbolE; var hh: boolean; Clave: tInfo);

var n1: tArbolE;beginif EsVacio (r) then {se ha llegado a nodo hoja}beginr := Crear (Clave); hh := true {la altura del árbol ha crecido}

end;else if (Clave < r^.info) then {Seguimos por la izquierda}

beginInsertarE (r^.iz, hh, Clave);if hh then {decrementar en 1 Fe porque se insertó porcase r^.fe of rama izquierda}1: begin

r^.fe := 0; hh := falseend;

0: r^.fe := -1;-1: begin {Debe valer –2. Desequilibrio izquierda}

n1 := r^.iz;if (n1^.fe = -1) then rsi (r, n1) {desequilibrio izq}else rdid (r, n1); {n1^.fe = 1}hh := false

endend; {case}

end {if}

Page 64: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

64

Diseño e implementación de árboles AVL• INSERCIÓN:

else if (Clave > r^.info) then {Seguimos por la derecha}begin

InsertarE (r^.de, hh, clave);if hh then {incrementar en 1 Fe porque se insertó porcase r^.fe of rama derecha}-1: begin {se reequilibra solo}

r^.fe := 0; hh := falseend;

0: r^.fe := 1;1: begin {Debe valer 2. Desequilibrio derecha}

n1 := r^.de;if (n1^.fe = 1) then rsd (r, n1) {desequilibrio dcha}else rddi (r, n1);hh := false

endend; {case}

end {if}else begin {Clave = r^.info}

writeln (‘No está previsto insertar claves repetidas’);hh := false

endend;

Page 65: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

65

SUPRIMIR EN AVL• Sigue la estrategia del algoritmo de supresión

en árboles binarios de búsqueda.

• Al suprimir un nodo con cierta clave, el árbol resultante debe seguir siendo un árbol equilibrado.

• Una vez eliminado un nodo siguiendo los criterios ABB, se regresa por el camino calculando los nuevos factores de equilibrio (Fe).

• Si en alguno de los nodos se viola el criterio de equilibrio debe restaurarse el mismo, teniendo en cuenta que pueden producirse más de una rotación en el retroceso.

• En los procedimientos el argumento booleanhh, será activado cuando la altura del árbol disminuya por eliminación de nodo o reestructuración del subárbol.

Page 66: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

66

SURPIMIR EN AVL• Casos en la reestructuración:Caso A: Eliminar el nodo con clave 42

Rotación I, porque n^.fe := -2 y n1^.fe < = 0

Page 67: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

67

SUPRIMIR EN AVL• Casos en la reestructuración:Caso B: Eliminar el nodo con clave 21

Rotación DI, porque n^.fe := 2 y n1^.fe < 0

El Fe del nodo visitado disminuye en 1 si la eliminación se hizo por su rama derecha y se incrementa en 1 si la eliminación se hizo por su rama izquierda.

Page 68: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

68

SUPRIMIR EN AVL• Casos en la reestructuración:Caso C: Eliminar el nodo con clave 25

Rotación D, porque n^.fe := 2 y n1^.fe >= 0

Page 69: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

69

SUPRIMIR EN AVL• Casos en la reestructuración:Caso B: Reestructurar 65:

Rotación DI, porque n^.fe := 2 y n1^.fe < 0

Page 70: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

70

Diseño e implementaciónde árboles AVL

• SUPRIMIR:procedure EquilibrarI (var n: tArbolE; var hh:var n1: tArbolE; boolean);begincase n^.fe of-1: n^.fe := 0;0 : begin

n^.fe := 1; hh := falseend;

1: begin {Hay que restaurar el equilibrio}n1:= n^.de;if n1^.fe >=0 thenbeginif n1^.fe = 0 then hh := false; {no disminuye h}rsd (n, n1)

endelse rddi (n, n1)

end;end

end;

Page 71: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

71

Diseño e implementaciónde árboles AVL

• SUPRIMIR:procedure EquilibrarD (var n: tArbolE; var hh:var n1: tArbolE; boolean);begincase n^.fe of1 : n^.fe := 0;0 : begin

n^.fe := -1; hh := falseend;

-1: begin {Hay que restaurar el equilibrio}n1:= n^.iz;if n1^.fe <=0 thenbeginif n1^.fe = 0 then hh := false; rsi (n, n1)

endelse rdid (n, n1)

end;end

end;

Page 72: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

72

Diseño e implementación de árboles AVL

• SUPRIMIR:

procedure SuprimirE (var r: tArbolE; var hh: boolean; Clave: tInfo);

var q: tArbolE;procedure bor (var d: tArbolE; var hh: boolean);beginif d^.de <> nil thenbegin

bor (d^.de,hh);if hh then EquilibrarD (d, hh);

endelse begin

q^.info := d^.info;q := d;d := d^.iz;hh := true

endend;

Page 73: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

73

Diseño e implementación de árboles AVL

• SUPRIMIR:begin {Suprimir}if not EsVacio(r) then

if Clave < r^.info thenbeginSuprimir (r^.iz, hh, Clave);if hh then EquilibrarI (r, hh)

endelse if Clave > r^.info then

beginSuprimir (r^.de, hh, Clave);if hh then EquilibrarD (r, hh)

endelse begin {Ha sido encontrado el nodo}

q := r;if q^.de = nil thenbeginr := q^.iz; hh:= true {Disminuye la altura}

end (Sigue)

Page 74: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

Diseño e implementación de árboles AVL

• SUPRIMIR:else if q^.iz = nil then

beginr := q^.de; hh := true

endelse begin

bor ( q^.iz, hh);if hh then EquilibrarI (r, hh)end

dispose (q);end {else encontrar nodo}

end;

74

Page 75: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

75

Ejemplos de supresión de nodos

• Dado el siguiente árbol, realizar las supresiones de nodos siguientes de forma que en cada paso quede un árbol AVL: 5, 9, 8, 6, 3

Page 76: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

76

Estructura de datosTema 5: Árboles equilibrados

Prof. Montserrat Serrano Montero

Universidad de ValladolidDepartamento de informática

Campus de Segovia

Page 77: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

77

Nadie que no haya cometido nunca un error ha intentado nunca algo nuevo.

Einstein

ÍNDICE

Segunda parte:• Conceptos básicos• Buscando el equilibrio.• Diseño e implementaciónde árboles AVL

Page 78: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

78

INTERÉS DE LOS ÁRBOLES DE BÚSQUEDA

• Optimizar el proceso de búsqueda.

En el caso de un árbol binario ordenadohabrá que hacer un máximo de k comparaciones para encontrar el elemento buscado, siendo k la altura del árbol.En el caso más favorable, el árbol binario estácompleto. Así, el número máximo de elementos que puede tener un árbol binario de altura h es:

nmax = 1 + 2 + 4 + 8 + ...+ 2 k-1 = 2k –1k = log2(nmax + 1)

Page 79: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

79

CONCEPTOS BÁSICOS

• Si los elementos se añaden en el árbol según el algoritmo de inserción visto para los ABB, la estructura resultante del árbol dependerádel orden en que sean añadidos.

• Si todos los elementos se insertan en orden creciente o decreciente, el árbol va a tener todas sus ramas izquierda o derecha, respectivamente, vacías.

• La búsqueda en estos árboles será totalmente secuencial. Comparaciones: O (n)

Page 80: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

80

CONCEPTOS BÁSICOS

• La idea asociada a la eficiencia en la búsqueda de un elemento es la de árbol equilibrado.

• Intuitivamente quiere decir que “una rama del árbol no sea mucho más larga que otra”, “que el número de niveles no sea demasiado grande para el número de nodos existentes”, “que no haya desproporción de elementos de una rama con respecto a otra”.

Page 81: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

81

CONCEPTOS BÁSICOS• Un árbol binario lleno de altura h tiene todas

sus hojas a nivel h y todos los nodos que están a nivel menor que h tiene cada uno dos hijos.

• Un árbol binario completo de altura h es un árbol binario que está relleno a partir del nivel h-1, con el nivel h relleno de izquierda a derecha.

• Un árbol binario lleno, es completo.

Page 82: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

82

CONCEPTOS BÁSICOS• Un árbol perfectamente equilibrado es un

árbol binario en el que para todo nodo, el número de nodos en el subárbol izquierdo y el número de nodos en el subárbol derecho difieren como mucho en una unidad.

• Un árbol equilibrado en sentido AVL(Adelson-Velskii y Landis, 1962) es un árbol binario en el que la diferencia de alturas de los subárboles izquierdo y derecho correspondientes a cualquier nodo del árbol no es superior a uno.

Page 83: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

83

CONCEPTOS BÁSICOS

• Un árbol binario completo es un árbol equilibrado, mientras que un árbol binario lleno es totalmente equilibrado.

En la figura:a) Árbol equilibrado AVLb) Árbol totalmente equilibradoc) y d) Árboles no equilibrados

Page 84: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

84

CONCEPTOS BÁSICOS

• Un árbol binario de búsqueda va perdiendo o ganando equilibrio al insertar o suprimir elementos.

• Ejemplo:

Árbol binario de búsqueda equilibrado.Árbol perfectamente equilibrado, tras insertar 10.Árbol totalmente equilibrado, tras insertar 14.Árbol lleno.

Page 85: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

85

ÁRBOL BINARIO EQUILIBRADO (AVL)

• La altura o profundidad de un árbol binario es el nivel máximo de sus hojas. La altura de un árbol nulo se considera cero.

• El factor de equilibrio o balance de un nodo se define como la altura del subárbol derecho menos la altura del subárbol izquierdo correspondiente.

• El factor de equilibrio de cada nodo en un árbol equilibrado será 1, -1 ó 0.

Page 86: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

86

BUSCANDO EL EQUILIBRIO• Los algoritmos de inserción y borrado de los

ABB no garantizan que la estructura resultante sea equilibrada en sentido AVL.

• Es necesario definir otras operaciones auxiliares que se van a utilizar para garantizar que estas inserciones y supresiones sean equilibradas.

• Estas operaciones o manipulaciones se denominan rotaciones de nodos.

• Existen dos tipos de rotaciones de nodos:A) Simples: Izquierda y derecha.B) Dobles: Sucesiones de dos simples.

Page 87: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

87

BUSCANDO EL EQUILIBRIO• ROTACIÓN SIMPLE IZQUIERDA:

A1 < A < A2 < B < A3

• Ejemplo:

Page 88: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

88

BUSCANDO EL EQUILIBRIO• ROTACIÓN SIMPLE DERECHA:

A1 < A < A2 < B < A3

• Ejemplo:

• Construir el ABB mediante la inserción de los elementos 1, 2, 3, 4, 5, 6 y 7 de forma que quede equilibrado AVL.

Page 89: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

89

BUSCANDO EL EQUILIBRIO• ROTACIÓN DOBLE IZQUIERDA-DERECHA:

• Ejemplo:

Page 90: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

90

BUSCANDO EL EQUILIBRIO• ROTACIÓN DOBLE DERECHA-IZQUIERDA:

• Ejemplo:

.

Page 91: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

91

Diseño e implementaciónde árboles AVL

• DECLARACIÓN DE TIPOS:• Añadimos al tipo de datos que representa

cada nodo un campo más: el factor de equilibrio (fe).

typetInfo = ...;tArbolE = ^NodoAE;NodoAE = record

Info: tInfo;Fe: -1..1;Iz, De: tArbolE

end;

Page 92: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

92

INSERCIÓN EN AVL• Se quiere insertar un nodo en un árbol

equilibrado en sentido AVL de raíz R y subárboles izquierdo I y derecho D.

• Supóngase que se inserta en I aumentando su altura. Esta inserción puede dar lugar a tres situaciones distintas:

Caso A:• hI = hD Tras la inserción se conserva el

equilibrio. No es necesario realizar ninguna operación para restaurar el equilibrio.

Page 93: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

93

INSERCIÓN EN AVLCaso B:• hI < hD Tras la inserción, ambos subárboles

tienen la misma altura. Se mejora la condición de equilibrio del árbol.

Caso C:• hI > hD Tras la inserción, la diferencia de

alturas entre los subárboles es mayor que la unidad. El árbol se desequilibra y hay que hacer rotaciones para que siga siendo AVL.Dos subcasos:1. Inserción de un nodo menor que el raíz de I.2. Inserción de un nodo mayor que el raíz de I.

Page 94: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

INSERCIÓN EN AVLCaso C: Ejemplo

1. Se produce al insertar un nodo de clave 1 ó 3. Este índice es menor que el nodo raíz del subárbol izquierdo (4). La rotación a llevar a cabo para reequilibrar el árbol sería una rotación simple izquierda sobre el nodo raíz del árbol desequilibrado: el 8.

94

2. Se produce al insertar un nodo de clave 5 ó 7. Este índice es mayor que el nodo raíz del subárbol izquierdo (4). La rotación a llevar a cabo sería una rotación doble izquierda-derecha sobre el nodo raíz del árbol desequilibrado.

Page 95: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

95

Diseño e implementaciónde árboles AVL

• INSERCIÓN: (tratamiento rotaciones)• Inserción de las claves 68, 45, 29:

• Movimiento de los punteros: Rotación I

(1) n^.iz := n1^.de;(2) n1^.de := n;(3) n := n1

nil(1)

Page 96: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

96

Diseño e implementaciónde árboles AVL

• INSERCIÓN: (tratamiento rotaciones)• Inserción de las claves 75 y 90:

• Movimiento de los punteros: Rotación D

(1) n^.de := n1^.iz;(2) n1^.iz := n;(3) n := n1

nil(1)

Page 97: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

97

Diseño e implementaciónde árboles AVL

• INSERCIÓN: (tratamiento rotaciones)• Inserción de la clave 70:

• Movimiento de los punteros: Rotación DI

(1) n1^.iz := n2^.de;(2) n2^.de := n1;(3) n^.de := n2^.iz;(4) n2^.iz := n;(5) n := n2

(3)

nil

Page 98: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

98

Diseño e implementaciónde árboles AVL

• INSERCIÓN: (tratamiento rotaciones)• Inserción de la clave 34:

• Movimiento de los punteros: Rotación ID

(1) n1^.de := n2^.iz;(2) n2^.iz := n1;(3) n^.iz := n2^.de;(4) n2^.de := n;(5) n := n2 (3)

nil(1)

nil

Page 99: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

99

Diseño e implementaciónde árboles AVL

• INSERCIÓN:function EsVacio (R: tArbolE): boolean;beginEsVacio:= (R = nil)

end;

function Crear (Clave: tInfo): tArbolE;var n: tArbolE;beginnew (n);with n^ dobegin

info:= Clave;iz := nil;de := nil;fe := 0 {propio de un nodo hoja}

end;Crear := n

end;

Page 100: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

Diseño e implementaciónde árboles AVL

100

• INSERCIÓN:

procedure rsi (var n: tArbolE; n1: tArbolE);begin(1) n^.iz := n1^.de;(2) n1^.de := n;if n1^.fe = -1 thenbegin{Si la rotación es por inserción se cumple}

n^.fe := 0;n1^.fe := 0

endelse begin {n1^.fe=0}

n^.fe := -1;n1^.fe := 1

end;(3) n := n1;end;

Los factores de equilibrio se incrementan en uno si se fue por la rama derecha, se decrementa en 1 si se fue por la rama izquierda.

Ajuste del factor de equilibrio

Page 101: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

101

Diseño e implementaciónde árboles AVL

• INSERCIÓN:

procedure rdid (var n: tArbolE; n1: tArbolE);var n2: tArbolEbeginn2 := n1^.de;(3) n^.iz := n2^.de;(4) n2^.de := n;(1) n1^.de := n2^.iz;(2) n2^.iz := n1;if (n2^.fe = 1) then n1^.fe := -1else n1^.fe := 0;if (n2^.fe = -1) then n^.fe :=1else n^.fe := 0;n2^.fe := 0;(5) n := n2;

end;

Ajuste del factor de equilibrio

Page 102: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

102

Diseño e implementaciónde árboles AVL

• INSERCIÓN:

procedure rsd (var n: tArbolE; n1: tArbolE);begin(1) n^.de := n1^.iz;(2) n1^.iz := n;if n1^.fe = 1 thenbegin {Si la rotación es por

inserción se cumple}n^.fe := 0;n1^.fe := 0

endelse begin {n1^.fe=0}n^.fe := 1;n1^.fe := -1

end;(3) n := n1;

end;

Ajuste del factor de equilibrio

Page 103: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

103

Diseño e implementaciónde árboles AVL

• INSERCIÓN:

procedure rddi (var n: tArbolE; n1: tArbolE);var n2: tArbolEbeginn2 := n1^.iz;(3) n^.de := n2^.iz;(4) n2^.iz := n;(1) n1^.iz := n2^.de;(2) n2^.de := n1;if (n2^.fe = 1) then n^.fe := -1else n^.fe := 0;if (n2^.fe = -1) then n1^.fe :=1else n1^.fe := 0;n2^.fe := 0;(5) n := n2;

end;

Page 104: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

104

Diseño e implementación de árboles AVL• INSERCIÓN:

procedure InsertarE (var r: tArbolE; var hh: boolean; Clave: tInfo);

var n1: tArbolE;beginif EsVacio (r) then {se ha llegado a nodo hoja}beginr := Crear (Clave); hh := true {la altura del árbol ha crecido}

end;else if (Clave < r^.info) then {Seguimos por la izquierda}

beginInsertarE (r^.iz, hh, Clave);if hh then {decrementar en 1 Fe porque se insertó porcase r^.fe of rama izquierda}1: begin

r^.fe := 0; hh := falseend;

0: r^.fe := -1;-1: begin {Debe valer –2. Desequilibrio izquierda}

n1 := r^.iz;if (n1^.fe = -1) then rsi (r, n1) {desequilibrio izq}else rdid (r, n1); {n1^.fe = 1}hh := false

endend; {case}

end {if}

Page 105: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

105

Diseño e implementación de árboles AVL• INSERCIÓN:

else if (Clave > r^.info) then {Seguimos por la derecha}begin

InsertarE (r^.de, hh, clave);if hh then {incrementar en 1 Fe porque se insertó porcase r^.fe of rama derecha}-1: begin {se reequilibra solo}

r^.fe := 0; hh := falseend;

0: r^.fe := 1;1: begin {Debe valer 2. Desequilibrio derecha}

n1 := r^.de;if (n1^.fe = 1) then rsd (r, n1) {desequilibrio dcha}else rddi (r, n1);hh := false

endend; {case}

end {if}else begin {Clave = r^.info}

writeln (‘No está previsto insertar claves repetidas’);hh := false

endend;

Page 106: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

106

SUPRIMIR EN AVL• Sigue la estrategia del algoritmo de supresión

en árboles binarios de búsqueda.

• Al suprimir un nodo con cierta clave, el árbol resultante debe seguir siendo un árbol equilibrado.

• Una vez eliminado un nodo siguiendo los criterios ABB, se regresa por el camino calculando los nuevos factores de equilibrio (Fe).

• Si en alguno de los nodos se viola el criterio de equilibrio debe restaurarse el mismo, teniendo en cuenta que pueden producirse más de una rotación en el retroceso.

• En los procedimientos el argumento booleanhh, será activado cuando la altura del árbol disminuya por eliminación de nodo o reestructuración del subárbol.

Page 107: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

107

SURPIMIR EN AVL• Casos en la reestructuración:Caso A: Eliminar el nodo con clave 42

Rotación I, porque n^.fe := -2 y n1^.fe < = 0

Page 108: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

108

SUPRIMIR EN AVL• Casos en la reestructuración:Caso B: Eliminar el nodo con clave 21

Rotación DI, porque n^.fe := 2 y n1^.fe < 0

El Fe del nodo visitado disminuye en 1 si la eliminación se hizo por su rama derecha y se incrementa en 1 si la eliminación se hizo por su rama izquierda.

Page 109: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

109

SUPRIMIR EN AVL• Casos en la reestructuración:Caso C: Eliminar el nodo con clave 25

Rotación D, porque n^.fe := 2 y n1^.fe >= 0

Page 110: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

110

SUPRIMIR EN AVL• Casos en la reestructuración:Caso B: Reestructurar 65:

Rotación DI, porque n^.fe := 2 y n1^.fe < 0

Page 111: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

111

Diseño e implementaciónde árboles AVL

• SUPRIMIR:procedure EquilibrarI (var n: tArbolE; var hh:var n1: tArbolE; boolean);begincase n^.fe of-1: n^.fe := 0;0 : begin

n^.fe := 1; hh := falseend;

1: begin {Hay que restaurar el equilibrio}n1:= n^.de;if n1^.fe >=0 thenbeginif n1^.fe = 0 then hh := false; {no disminuye h}rsd (n, n1)

endelse rddi (n, n1)

end;end

end;

Page 112: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

112

Diseño e implementaciónde árboles AVL

• SUPRIMIR:procedure EquilibrarD (var n: tArbolE; var hh:var n1: tArbolE; boolean);begincase n^.fe of1 : n^.fe := 0;0 : begin

n^.fe := -1; hh := falseend;

-1: begin {Hay que restaurar el equilibrio}n1:= n^.iz;if n1^.fe <=0 thenbeginif n1^.fe = 0 then hh := false; rsi (n, n1)

endelse rdid (n, n1)

end;end

end;

Page 113: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

113

Diseño e implementación de árboles AVL

• SUPRIMIR:

procedure SuprimirE (var r: tArbolE; var hh: boolean; Clave: tInfo);

var q: tArbolE;procedure bor (var d: tArbolE; var hh: boolean);beginif d^.de <> nil thenbegin

bor (d^.de,hh);if hh then EquilibrarD (d, hh);

endelse begin

q^.info := d^.info;q := d;d := d^.iz;hh := true

endend;

Page 114: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

114

Diseño e implementación de árboles AVL

• SUPRIMIR:begin {Suprimir}if not EsVacio(r) then

if Clave < r^.info thenbeginSuprimir (r^.iz, hh, Clave);if hh then EquilibrarI (r, hh)

endelse if Clave > r^.info then

beginSuprimir (r^.de, hh, Clave);if hh then EquilibrarD (r, hh)

endelse begin {Ha sido encontrado el nodo}

q := r;if q^.de = nil thenbeginr := q^.iz; hh:= true {Disminuye la altura}

end (Sigue)

Page 115: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

Diseño e implementación de árboles AVL

• SUPRIMIR:else if q^.iz = nil then

beginr := q^.de; hh := true

endelse begin

bor ( q^.iz, hh);if hh then EquilibrarI (r, hh)end

dispose (q);end {else encontrar nodo}

end;

115

Page 116: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

116

Universidad de ValladolidDepartamento de informática

Campus de Segovia

Estructura de datosTema 5:Otros árboles

Page 117: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

117

ÍNDICE

Tercera parte:• Árboles generales• Bosques• Árboles enhebrados

Page 118: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

118

ÁRBOLES GENERALES• Un árbol de otro grado se puede transformar

a binario.

• Pasos: a) Quedarse con el enlace al hijo situado más a la izquierda de cada nodo.b) El hermano derecho más próximo se sitúa como subárbol derecho del hermano izquierdo.

Page 119: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

119

ÁRBOLES GENERALES

1.

2. 3. El nodo raíz es A

Page 120: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

120

BOSQUES• Un bosque es un conjunto de dos o más

árboles disjuntos.• Para poderse transformar a un árbol

binario, los árboles disjuntos tienen que estar ordenados.

• Pasos:a) Transformar cada árbol del bosque en binario según el criterio de transformación de árboles generales.b) Situar el nodo raíz de cada árbol como subárbol derecho del árbol más situado a su izquierda.

Page 121: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

121

BOSQUESBosque:

Árbol binario:

Page 122: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

122

BOSQUES• Recorrido preorden:

a) Visitar la raíz del primer árbol.b) Recorrer los subárboles del primer árbol (en preorden).c) Recorrer los árboles restantes (en preorden).Equivale a recorrer en preorden el árbol binario correspondiente.

Resultado: A-B-C-D-E-F-G-H-I

Page 123: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

123

BOSQUES• Recorrido postorden:

a) Recorrer los subárboles del primer árbol (en postorden).b) Visitar la raíz del primer árbol.c) Recorrer los árboles restantes (en postorden).Equivale a recorrer enorden el árbol binario.

Resultado: B-C-D-A-F-E-H-I-G

Page 124: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

124

ÁRBOLES ENHEBRADOS• Una forma de aprovechar los nodos a nil de un

árbol binario consiste en utilizarlos como apuntadores a otros nodos del árbol.

• A estos punteros se les llama hebras:a) El puntero derecho de un nodo hoja apunta al nodo sucesor del árbol en el recorrido enorden.b) El puntero izquierdo apunta al nodo predecesor.

Page 125: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

125

ÁRBOLES ENHEBRADOS• Para distinguir los hijos de las hebras,

modificamos la estructura del árbol binario.

• Se introducen dos campos booleanos que indican si el puntero es un enlace a un hijo o a una hebra:

typetipoInfo = ...;tArbolEn=^Nodo;Nodo = record

info: tipoInfo;hiz, hde: boolean;iz, de: tArbolEn

end;

• Así si hiz ó hde valen true, esto hace que iz y de sean hebras.

Page 126: Estructura de datos - Departamento de Informáticamserrano/EDI/cap5.pdf · árbol con estructura de árbol. • Raíz: Nodo superior de un árbol. Al nodo raíz se le asocia el nivel

126

ÁRBOLES ENHEBRADOS• Se incluye un nodo cabecera que no tiene

información. Su estructura es: