estructura de datos - departamento de informáticamserrano/edi/cap5.pdf · árbol con estructura de...
TRANSCRIPT
![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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/1.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/8.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/29.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/30.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/31.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/33.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/34.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/35.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/36.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/37.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/38.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/39.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/40.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/41.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/42.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/43.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/44.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/45.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/46.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/47.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/48.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/49.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/50.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/51.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/52.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/53.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/54.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/55.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/56.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/57.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/58.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/59.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/60.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/61.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/62.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/63.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/64.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/65.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/66.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/67.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/68.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/69.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/70.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/71.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/72.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/73.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/74.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/75.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/76.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/77.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/78.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/79.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/80.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/81.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/82.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/83.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/84.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/85.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/86.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/87.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/88.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/89.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/90.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/91.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/92.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/93.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/94.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/95.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/96.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/97.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/98.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/99.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/100.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/101.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/102.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/103.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/104.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/105.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/106.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/107.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/108.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/109.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/110.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/111.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/112.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/113.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/114.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/115.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/116.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/117.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/118.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/119.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/120.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/121.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/122.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/123.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/124.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/125.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022040901/5e72a008f3a44e69933b771a/html5/thumbnails/126.jpg)
126
ÁRBOLES ENHEBRADOS• Se incluye un nodo cabecera que no tiene
información. Su estructura es: