Estructura de Datos Árboles Binarios de Búsqueda ABB

Anuncio
Universidad Técnica Federico Santa María - Departamento de Informática
Estructura de Datos
Árboles Binarios de Búsqueda
ABB
Prof.: Mauricio Solar
Prof.: Lorna Figueroa
Primer Semestre,
2010
1
Universidad Técnica Federico Santa María - Departamento de Informática
Arboles de Búsqueda Binaria
• El árbol binario de búsqueda (ABB) toma su nombre del
método de búsqueda dicotómico usado para listas ordenadas,
• usa un array para mantener un conjunto de items (número
de items limitado, y operaciones de inserción y borrado de
elementos costosas).
• Una implementación dinámica sería muy ineficiente.
• Otra solución consistiría en utilizar un árbol para mantener la
información ordenada, con operaciones de inserción y
extracción muy eficientes.
2
Universidad Técnica Federico Santa María - Departamento de Informática
Arboles de Búsqueda Binaria
• El TAD ABB es un árbol binario en el que los nodos están
ordenados.
• El orden impuesto a los nodos es tal que para cada nodo, todos
los valores de su subárbol izquierdo son menores que su valor,
y todos los valores del derecho son mayores.
• El tipo base requiere una relación de orden total.
• Un árbol ordenado lleno permite la búsqueda óptima de sus
elementos.
3
Universidad Técnica Federico Santa María - Departamento de Informática
Arboles de Búsqueda Binaria
• En un árbol binario ordenado cada vez que se compara el
elemento buscado con la raíz se decide si continuar hacia abajo
por la derecha o por la izquierda, dejando así la mitad de los
nodos a un lado.
• En un número de comparaciones proporcional a la altura del
árbol (h ≈ log2(N)) se habrá decidido si el elemento está o no
en el árbol.
• Por ejemplo, si hay 32.768 (= 215) elementos en el árbol de
búsqueda lleno, sólo se requieren 15 comparaciones.
4
Universidad Técnica Federico Santa María - Departamento de Informática
Arboles de Búsqueda Binaria
• Los árboles binarios de búsqueda son estructuras de datos con
un gran rendimiento cuando las tareas a realizar implican
búsquedas, inserciones y eliminación de nodos.
• No basta con almacenar la información en un árbol para
facilitar la búsqueda, se debe utilizar un tipo especial de árbol:
un árbol binario de búsqueda.
• Si además se quiere que la búsqueda sea eficiente se deben
utilizar árboles de búsqueda binarios equilibrados.
5
Universidad Técnica Federico Santa María - Departamento de Informática
Árboles de Búsqueda Binaria
15
9
3
27
21
18
30
24
6
Universidad Técnica Federico Santa María - Departamento de Informática
ABB - Definición
Un árbol binario de búsqueda es una estructura de datos en el
que para todos sus nodos, el hijo izquierdo, si existe,
contiene un valor menor que el nodo padre y el hijo derecho,
si existe, contiene un valor mayor que el del nodo padre.
15
9
3
27
21
18
30
24
7
Universidad Técnica Federico Santa María - Departamento de Informática
ABB - Definición
• Se define ABB para un conjunto S, como un árbol binario
rotulado, en que cada nodo v tiene un rótulo l(v) tal que :
• Para todo u en el subárbol derecho de v, l(u) > l(v)
• Para todo u en el subárbol izquierdo de v, l(u) < l(v)
• Para a ∈ S, existe un único v tal que l(v) = a
8
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ABB
• Son una subclase muy importante del TAD AB ya que
permiten el ordenamiento y búsqueda de datos en forma simple
y eficiente.
• La especificación del TAD ABB es muy similar a la de AB.
9
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ArbolBB
Operaciones:
• CrearArbol → ArbolBB
• Su resultado es la creación de un ABB vacío.
• ArbolVacio(ArbolBB) → Logico
• Devuelve cierto si el argumento de entrada es un ABB
vacío, falso en caso contrario.
• BuscarNodo(ArbolBB, TElemento x) → ArbolBB
• A partir de un ABB y de un valor de tipo base, el resultado
es el ABB cuyo nodo raíz contiene dicho valor.
10
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ArbolBB
•
•
InsertarNodo(ArbolBB, TElemento x) → ArbolBB
• A partir de un ABB y de un valor de tipo base, el resultado
es un nuevo ABB en el que se ha añadido el nuevo valor
(es decir, la inserción es ordenada).
EliminarNodo(ArbolBB, TElemento x) → ArbolBB
• A partir de un ABB y de un valor de tipo base, el resultado
es un nuevo ABB en el que se ha eliminado el nodo que
contenía la información de tipo base.
Existen tres casos posibles:
a) Que el nodo sea una hoja
b) Que el nodo a eliminar tenga sólo un hijo
c) Que el nodo a eliminar sea un nodo interior
11
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejemplo
Para la secuencia: 15, 18, 14, 5, 10, 12, 7, se construye el ABB:
15
18
14
5
10
7
12
InOrden : 5, 7, 10, 12, 14, 15, 18
12
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ABB – Ejemplo
• Debido al orden impuesto sobre los elementos de un ABB no
vacío el menor de ellos es aquel que está almacenado en el
nodo más a la izquierda del mismo.
ArbolBB
ArbolBBMinimo
Minimo(AB
(ABab)
ab) {{
/*
/*pre:
pre:ab
abes
esun
unABB
ABBno
novacío
vacío
post:
post:retorna
retornaelelmínimo
mínimoelemento
elementode
deab
ab*/
*/
ifif(ArbolVacio(SubArbIzq(ab)))
(ArbolVacio(SubArbIzq(ab)))
return
returnRaizAB(ab);
RaizAB(ab);
else
else
return
returnMinimo(SubArbIzq(ab));
Minimo(SubArbIzq(ab));
}}
13
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – BuscarNodo
•
•
•
•
•
Suponga que se busca un elemento x en el árbol.
Lo primero es comprobar si se encuentra en el nodo raíz.
Si no es así, si el elemento buscado es menor que el
contenido en el nodo raíz se deduce que, de estar en el árbol,
se encuentra en el subárbol izquierdo.
Si el elemento buscado es mayor que el contenido en el
nodo raíz se deduce que, de estar en el árbol, se encuentra en
el subárbol derecho.
Para continuar la búsqueda en el subárbol adecuado se
aplica recursivamente el mismo razonamiento.
14
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – BuscarNodo
•
El esquema del algoritmo será el siguiente :
1. Si el valor del nodo actual es igual al valor buscado Î
encontrado.
2. Si valor buscado es menor que el del nodo actual Î
buscar en el subárbol izquierdo.
1. Si valor buscado es mayor que el del nodo actual Î
buscar en el subárbol derecho.
1. Si el valor no está en el árbol Î no encontrado.
15
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – BuscarNodo – Implementación
typedef
typedefint
intTipoElemento;
TipoElemento;
typedef
typedefstruct
structnodo
nodo{{
TipoElemento
TipoElementodato;
dato;
struct
structnodo
nodo*izq;
*izq;
struct
structnodo
nodo*der;
*der;
}}Nodo;
Nodo;
typedef
typedefNodo*
Nodo*ArbolBinar;
ArbolBinar;
Autor: Ing Rolando Simon Titiosky
16
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – BuscarNodo – Implementación
Nodo
Nodo*BuscarNodo(Nodo
*BuscarNodo(Nodo*raiz,
*raiz,TipoElemento
TipoElementobuscado)
buscado) {{
if(!raiz)
if(!raiz)
return
/*Árbol
return0;
0;
/*Árbolvacío*/
vacío*/
else
elseifif(buscado
(buscado==
==raiz–>dato)
raiz–>dato)
return
returnraiz;
raiz;
else
elseifif(buscado
(buscado<<raiz–>dato)
raiz–>dato)
return
returnBuscarNodo(raiz–>izq,
BuscarNodo(raiz–>izq,buscado);
buscado);
else
else
return
returnBuscarNodo(raiz–>der,
BuscarNodo(raiz–>der,buscado);
buscado);
Autor: Ing Rolando Simon Titiosky
}}
17
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – BuscarNodo – Implementación 2
tAB*
tAB*BuscarNodo2
BuscarNodo2(tAB
(tAB*A;
*A;tElemento
tElementox)
x){{
tAB
tAB pp==A;
A;
BOOLEAN
BOOLEANenc;
enc;
enc
enc==false;
false;
while
while((((!!enc)
enc)&&
&&((p!=
p!=NULL
NULL)))){{
enc
enc==pp->
->info
info==
==x;
x;
ifif!!enc
enc
ifif(x
(x<<pp->
->info
info))
pp==SubArbolIzq(p);
SubArbolIzq(p);
else
else
pp==SubArbolDer(p);
SubArbolDer(p);
}}
Si el resultado devuelto es NULL, significa
return
returnp;
p;
que no se ha encontrado el elemento buscado
}}
18
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – InsertarNodo
•
La inserción de un elemento está basado en el algoritmo
de búsqueda.
Se determina si el elemento está en el árbol,
• Si está, no se inserta.
• En caso contrario, se agrega como hoja.
•
19
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – InsertarNodo
•
Ciclo: mientras no sea un árbol vacío o hasta que se
encuentre el elemento.
Si el valor del nodo raíz es mayor que el elemento
buscado, continuar la búsqueda en el árbol izquierdo:
• Padre = nodo
• nodo = nodo -> izq
•
•
Si el valor del nodo raíz es menor que el elemento
buscado, continuar la búsqueda en el árbol derecho:
• Padre = nodo
• nodo = nodo -> der
20
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
• Para cada secuencia, construir el ABB correspondiente
determinar recorrido en: InOrden – Postorden – PreOrden
•
10 – 5 – 7 – 14 – 12 – 18 – 15
•
15 – 18 – 4 – 5 – 10 – 12 – 7
y
21
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Arbol vacío
NULL
22
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Arbol vacío
NULL
Insertar 10:
10
23
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Arbol vacío
NULL
Insertar 10:
Insertar 5:
10
10
5
24
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Arbol vacío
NULL
Insertar 10:
Insertar 5:
10
10
5
Insertar 7:
10
5
7
25
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Insertar 14:
10
14
5
7
26
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Insertar 14:
Insertar 12:
10
10
14
5
7
14
5
7
12
27
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Insertar 14:
Insertar 12:
10
Insertar 18:
10
14
5
10
14
5
7
7
14
5
12
7
12
18
28
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para : 10 – 5 – 7 – 14 – 12 – 18 – 15
Insertar 15:
10
14
5
7
18
12
15
InOrden: 5 – 7 – 10 – 12 – 14 – 15 - 18
29
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Entrada: 15 – 18 – 4 – 5 – 10 – 12 – 7
Arbol vacío
NULL
30
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Entrada: 15 – 18 – 4 – 5 – 10 – 12 – 7
Arbol vacío
NULL
Insertar 15:
15
31
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Entrada: 15 – 18 – 4 – 5 – 10 – 12 – 7
Arbol vacío
NULL
Insertar 15:
Insertar 18:
15
15
18
32
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Entrada: 15 – 18 – 4 – 5 – 10 – 12 – 7
Arbol vacío
NULL
Insertar 15:
Insertar 18:
15
15
Insertar 4:
15
18
4
18
33
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para: 15 – 18 – 4 – 5 – 10 – 12 – 7
Insertar 5:
15
18
4
5
34
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para: 15 – 18 – 4 – 5 – 10 – 12 – 7
Insertar 5:
Insertar 10:
15
15
18
4
4
18
5
5
10
35
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para: 15 – 18 – 4 – 5 – 10 – 12 – 7
Insertar 5:
15
15
15
18
4
Insertar 12:
Insertar 10:
4
18
5
5
5
10
18
4
10
12
36
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para: 15 – 18 – 4 – 5 – 10 – 12 – 7
Insertar 7:
15
18
4
5
10
7
12
InOrden: 4 – 5 – 7 – 10 – 12 – 15 – 18
37
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – InsertarNodo – Implementación
Es
Esuna
unaextensión
extensiónde
delalaoperación
operaciónde
deBúsqueda
Búsqueda
––Si
Sielelárbol
árbolestá
estávacío
vacíose
seinserta
insertadirectamente
directamente
––SINO:
SINO:Buscará
Buscaráen
enelelárbol
árbolelellugar
lugarcorrecto
correctode
deInserción
Inserción
void
voidInsertarNodo
InsertarNodo(Nodo**
(Nodo**raiz,
raiz,TipoElemento
TipoElementodato)
dato) {{
ifif(!(*raiz))
(!(*raiz))
*raiz
*raiz==CrearNodo(dato);
CrearNodo(dato);
else
elseifif(dato
(dato<<(*raiz)
(*raiz)>dato)
>dato)
InsertarNodo(&((*raiz)
InsertarNodo(&((*raiz)>izdo),
>izdo),dato);
dato);
else
else
InsertarNodo(&((*raiz)
InsertarNodo(&((*raiz)>dcho),
>dcho),dato);
dato);
Autor: Ing Rolando Simon Titiosky
}}
38
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – InsertarNodo – Implementación 2
void
voidInsertarNodo_2
InsertarNodo_2(tAB
(tAB**A;
**A;tElemento
tElementox)
x) {{
ifif(*A
(*A==
==NULL
NULL)){{
*A
*A==(tAB
(tAB*)
*)malloc(sizeof(tAB));
malloc(sizeof(tAB));
(*A
(*A)->info
)->info==x;
x;
(*A
(*A)->izq
)->izq==NULL;
NULL;
(*A
(*A)->der
)->der==NULL;
NULL;
}}
else
else if(
if((*A)
(*A)->
->info
info>>x)
x)
InsertarNodo(&(*A)
InsertarNodo(&(*A)->
->izq,
izq,x);
x);
else
else if(
if((*A)
(*A)->
->info
info<<x)
x)
InsertarNodo(&(*A)
InsertarNodo(&(*A)->
->der,
der,x);
x);
else
else
printf(
printf(“Dato
“Datorepetido
repetido “);
“);
}}
39
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – EliminarNodo
1. Buscar el nodo que se desea borrar.
2. Si se encuentra el nodo hay que contemplar tres casos
posibles:
a) Si el nodo a borrar no tiene hijos Î se libera el espacio
que ocupa.
b) Si el nodo a borrar tiene un hijo Î este hijo ocupa la
posición ocupada por el nodo borrar.
c) Si el nodo a borrar tiene dos hijos Î
i. Se busca el máximo de la rama izquierda, o el
mínimo de la rama derecha.
ii. Se sustituye el nodo a borrar por el nodo
encontrado (máximo o mínimo).
iii. Se elimina el nodo copiado (máximo o mínimo).
40
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ABB – EliminarNodo
a) Que el nodo sea una hoja:
41
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ABB – EliminarNodo
b) Que el nodo tenga un hijo:
42
Universidad Técnica Federico Santa María - Departamento de Informática
El TAD ABB – EliminarNodo
c) Que el nodo sea interno:
43
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – EliminarNodo; caso a)
Si el nodo a borrar no tiene hijos Î se libera el espacio que ocupa.
Árbol Inicial:
Árbol Final:
15
15
9
27
21
12
9
36
24
18
27
21
12
36
18
Suprimir 24
44
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – EliminarNodo; caso b)
Si el nodo a borrar tiene un hijo Î este hijo ocupa la posición
ocupada por el nodo borrar.
Árbol Inicial:
Árbol Final:
15
15
9
27
21
12
9
36
12
18
27
18
36
Suprimir 21
45
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – EliminarNodo; caso c)
Si el nodo a borrar tiene dos hijos Î
i. Se busca el máximo de la rama izquierda o el mínimo de la
rama derecha.
ii. Se sustituye el nodo a borrar por el nodo encontrado.
Árbol Inicial:
Árbol Final:
Suprimir 15
15
12
9
9
27
18
12
27
18
36
36
46
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Para el árbol inicial, eliminar las claves 24 – 21 – 15 – 27 – 12.
Suprimir 24 (caso a):
Arbol inicial:
15
15
12
12
36
21
18
27
9
27
9
36
21
18
24
47
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Arbol inicial:
Suprimir 21 (caso b):
15
15
27
9
27
9
12
21
36
12
18
36
18
48
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Árbol inicial:
Suprimir 15 (caso c):
15
Dos soluciones posibles :
27
9
12
12
18
36
18
27
9
36
18
27
9
12
36
49
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Árbol inicial:
Suprimir 27 (caso c):
12
12
27
9
18
9
36
36
18
50
Universidad Técnica Federico Santa María - Departamento de Informática
ABB – Ejercicios
Arbol inicial:
Suprimir 12 (caso c):
12
9
9
18
18
36
36
51
Universidad Técnica Federico Santa María - Departamento de Informática
Implementación de EliminarNodo
void
voideliminar
eliminar(Nodo**
(Nodo**r,r,TipoElemento
TipoElementodato)
dato) {{
ifif(!(*r))
(!(*r))
puts("Nodo
puts("Nodono
noencontrado");
encontrado");
else
elseifif(dato
(dato<<(*r)
(*r)->
->dato)
dato)
eliminar(&(*r)
eliminar(&(*r)->izdo,
->izdo,dato);
dato);
else
if
(dato
>
(*r)
->dato)
else if (dato > (*r) ->dato)
eliminar(&(*r)
->dcho,dato);
eliminar(&(*r) ->dcho,dato);
else
/*/*Nodo
else {{
Nodoencontrado
encontrado*/*/
Nodo*
/*/*puntero
Nodo*q;q;
punteroalalnodo
nodoaasuprimir
suprimir*/*/
qq==(*r);
/*/*rres
(*r);
eselelptr
ptrdel
delnodo
nodoPadre
Padre*/*/
ifif(q
->izdo
==
NULL)
(q ->izdo == NULL)
(*r)
=
q
>dcho;
(*r) = q >dcho;
else
elseifif(q
(q->dcho
->dcho==
==NULL)
NULL)
(*r)
(*r)==qq->izdo;
->izdo;
else
/*/*tiene
else
tienerama
ramaizquierda
izquierdayyderecha
derecha*/*/
reemplazar(&q);
reemplazar(&q);
free(q);
free(q);
Autor: Ing Rolando Simon Titiosky
}}
52
}}
Universidad Técnica Federico Santa María - Departamento de Informática
Implementación de EliminarNodo
void
voidreemplazar(Nodo**
reemplazar(Nodo**act)
act) {{
Nodo*
Nodo*a,a,*p;
*p;
pp==*act;
*act;
aa==(*act)
/*/*menores
(*act)->izdo;
->izdo;
menoresaaIZQ*/
IZQ*/
while
while(a(a->dcho)
->dcho) {{
pp==a;a;
/*/*buscar
el
Mayor
buscar el MayoraaDER*/
DER*/
aa==aa->dcho;
->dcho;
}}
/*/*Cambio
Cambiodel
delcampo
campoDatos
Datos*/*/
(*act)
(*act)->dato
->dato==aa->dato;
->dato;
/*/*Al
AlAbuelo
Abuelop,p,se
sehace
hacecargo
cargode
denieto
nietoIZQ
IZQ*/*/
ifif(p
(p==
==(*act))
(*act))
pp->izdo
->izdo==aa->izdo;
->izdo;
else
else
pp->dcho
->dcho==aa->izdo;
->izdo;
(*act)
(*act)==a;a;
}}
53
Universidad Técnica Federico Santa María - Departamento de Informática
Otras Operaciones del TAD ABB
•
•
•
•
•
•
•
•
•
•
•
•
•
Altura: retorna la altura de un árbol
Construir: crea un árbol con un elemento raíz y dos ramas.
Copiar: crear una copia del árbol
CrearArbol: Inicia un árbol vacío
Derecho: retorna la rama derecha de un árbol dado.
Nodos: determina el número de nodos del árbol
EsVacio: comprueba si el árbol tiene nodos
Iguales: determinar si dos árboles son idénticos
Izquierdo: retorna la rama izquierda de un árbol dado.
Pertenece: determina si un elemento pertenece a un árbol.
Recorrer: el árbol de acuerdo a algunos de los criterios
Profundidad: determina la profundidad de un árbol dado
Raiz: devuelve el nodo raíz.
54
Universidad Técnica Federico Santa María - Departamento de Informática
Análisis de la complejidad de un ABB
Si el árbol está bien balanceado, ningún camino de la raíz a una
hoja tiene más de ( 1 + log2(n) ) nodos.
Ejemplo:
18
27
9
15
12
21
36
h(A) = ( 1 + log2(7) ) ≈ 3
55
Universidad Técnica Federico Santa María - Departamento de Informática
Análisis de la complejidad de un ABB
Pueden ocurrir situaciones muy desfavorables:
18
27
36
41
92
Así, insertar un elemento i-ésimo toma O(i)
56
Universidad Técnica Federico Santa María - Departamento de Informática
Análisis de la complejidad de un ABB
Luego, el proceso de n inserciones toma :
⎛ n
⎛ ⎛ n + 1⎞⎞⎞
O⎜⎜ i = O⎜⎜ n⎜
⎟ ⎟⎟ ⎟⎟
⎝ ⎝ 2 ⎠⎠⎠
⎝ i =1
∑
Se puede demostrar que el caso promedio en la inserción es :
h(altura) = 1.4 log2(n);
O(log2(n))
El caso promedio en hacer una operación Búsqueda, Eliminar,
también lo son.
57
Universidad Técnica Federico Santa María - Departamento de Informática
Ejercicios
1. Implementar una función que devuelva una lista con las hojas
de un árbol binario de búsqueda.
2. Implementar una función que devuelva el nº de nodos externos
de un árbol binario de búsqueda.
3. Escribir la función MAX_NODO que, suponiendo que el tipo
base Elemento posee una relación de orden total, devuelva el
mayor valor de los almacenados en un ABB.
4. Dado un árbol binario de búsqueda, hacer un función que
devuelva la diferencia entre el mayor y el menor de los valores
almacenados en dicho árbol. Hacerlo de forma no recursiva.
58
Universidad Técnica Federico Santa María - Departamento de Informática
Ejercicios
5. Implementar un procedimiento al que se le pasan dos árboles
binarios de búsqueda, y devuelve uno sólo, también binario de
búsqueda, y que es el resultado de la mezcla de los dos
anteriores.
6. Representar por medio de árboles las siguientes expresiones
aritméticas:
• (x + y) * (a- b)
• [x + (y * z)] * c
• x * (y / -z)
• a + [(b * (c + d)]
• [a * (x + y)] * c
• x * y / [(a + b) * c]
• (x * y / a) + (b * c)
59
Universidad Técnica Federico Santa María - Departamento de Informática
Bibliografía - Webgrafía
• Introduction to Algorithms, 2nd edition. Cormen, T.,
Leiserson, Ch., Rivest, R. and Stein, C. MIT Press. 2001.
• Data Structures and Algorithms. A. Aho, J. Hopcroft, and J.
Ullman. Addison-Wesley, 1983. Traducido al castellano, 1988.
• The Art of Computer Programming. Vol. 3: Searching and
Sorting. Donald E. Knuth. Addison-Wesley, Massachusetts,
1973. Traducido al castellano en Ed. Reverté, Barcelona.
• Programación Modular. ETSIT. Guión del profesor Juan
Falgueras, Curso 2005.
• Estructuras de Datos y Algoritmos, M.A. Weiss, AddisonWesley Iberoamericana, 1995.
• http://www.lcc.uma.es/~galvez/ftp/tad/tadtema4.pdf
60
Universidad Técnica Federico Santa María - Departamento de Informática
Bibliografía - Webgrafía
• http://delta.cs.cinvestav.mx/~adiaz/anadis/BinTree.pdf
• http://www.ucema.edu.ar/~rst/Algoritmos_y_Estructura_de_Datos
/Teoria/5._Arboles_binarios.pdf
• http://www.madsgroup.org/docencia/alg/arboles_monticulos.pdf
• http://www.fdi.ucm.es/profesor/csegura/edi0405/arboles.pdf
• http://www.iuma.ulpgc.es/users/jmiranda/docencia/programacion/
Tema7_ne.pdf
• http://quegrande.org/apuntes/EI/1/EDI/teoria/0809/arboles_binarios_de_busqueda.pdf
• http://usuarios.multimania.es/sanjudas/download/ResumenArboles
.pdf
61
Descargar