Universidad Técnica Federico Santa María - Departamento de ... · es el ABB cuyo nodo raíz...

21
Universidad Técnica Federico Santa María - Departamento de Informática 1 Estructura de Datos Árboles Binarios de Búsqueda ABB Prof.: Mauricio Solar Prof.: Lorna Figueroa Primer Semestre, 2010 2 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. 3 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.

Transcript of Universidad Técnica Federico Santa María - Departamento de ... · es el ABB cuyo nodo raíz...

Universidad Técnica Federico Santa María - Departamento de Informática

1

Estructura de Datos

Árboles Binarios de BúsquedaABB

Prof.: Mauricio Solar Prof.: Lorna Figueroa

Primer Semestre, 2010

2

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.

3

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.

4

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.

5

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.

6

Universidad Técnica Federico Santa María - Departamento de Informática

Árboles de Búsqueda Binaria

15

9

3

27

21

18

30

24

7

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

8

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

9

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.

10

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.

11

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 hojab) Que el nodo a eliminar tenga sólo un hijoc) Que el nodo a eliminar sea un nodo interior

12

Universidad Técnica Federico Santa María - Departamento de Informática

Para la secuencia: 15, 18, 14, 5, 10, 12, 7, se construye el ABB:

15

14 18

5

12

10

7

InOrden : 5, 7, 10, 12, 14, 15, 18

ABB – Ejemplo

13

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 Minimo (AB ab) /* pre: ab es un ABB no vacío

post: retorna el mínimo elemento de ab */ if (ArbolVacio(SubArbIzq(ab)))

return RaizAB(ab); else

return Minimo(SubArbIzq(ab));

ArbolBB Minimo (AB ab) /* pre: ab es un ABB no vacío

post: retorna el mínimo elemento de ab */ if (ArbolVacio(SubArbIzq(ab)))

return RaizAB(ab); else

return Minimo(SubArbIzq(ab));

14

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.

15

Universidad Técnica Federico Santa María - Departamento de Informática

• El esquema del algoritmo será el siguiente :

ABB – BuscarNodo

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.

16

Universidad Técnica Federico Santa María - Departamento de Informática

typedef int TipoElemento;typedef struct nodo

TipoElemento dato;struct nodo *izq;struct nodo *der;

Nodo;typedef Nodo* ArbolBinar;

typedef int TipoElemento;typedef struct nodo

TipoElemento dato;struct nodo *izq;struct nodo *der;

Nodo;typedef Nodo* ArbolBinar;

ABB – BuscarNodo – Implementación

Autor: Ing Rolando Simon Titiosky

17

Universidad Técnica Federico Santa María - Departamento de Informática

Nodo *BuscarNodo(Nodo *raiz, TipoElemento buscado) if(!raiz)

return 0; /*Árbol vacío*/else if (buscado == raiz–>dato)

return raiz;else if (buscado < raiz–>dato)

return BuscarNodo(raiz–>izq, buscado);else

return BuscarNodo(raiz–>der, buscado);

Nodo *BuscarNodo(Nodo *raiz, TipoElemento buscado) if(!raiz)

return 0; /*Árbol vacío*/else if (buscado == raiz–>dato)

return raiz;else if (buscado < raiz–>dato)

return BuscarNodo(raiz–>izq, buscado);else

return BuscarNodo(raiz–>der, buscado);

ABB – BuscarNodo – Implementación

Autor: Ing Rolando Simon Titiosky

18

Universidad Técnica Federico Santa María - Departamento de Informática

tAB* BuscarNodo2 (tAB *A; tElemento x) tAB p = A;BOOLEAN enc;enc = false;while ( ( ! enc) && ( p!= NULL ) )

enc = p -> info == x;if ! enc

if (x < p -> info ) p = SubArbolIzq(p);

elsep = SubArbolDer(p);

return p;

tAB* BuscarNodo2 (tAB *A; tElemento x) tAB p = A;BOOLEAN enc;enc = false;while ( ( ! enc) && ( p!= NULL ) )

enc = p -> info == x;if ! enc

if (x < p -> info ) p = SubArbolIzq(p);

elsep = SubArbolDer(p);

return p;

Si el resultado devuelto es NULL, significa que no se ha encontrado el elemento buscado

ABB – BuscarNodo – Implementación 2

19

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.

20

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

21

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

• Para cada secuencia, construir el ABB correspondiente y determinar recorrido en: InOrden – Postorden – PreOrden

• 10 – 5 – 7 – 14 – 12 – 18 – 15

• 15 – 18 – 4 – 5 – 10 – 12 – 7

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

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:

10

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:

10

Insertar 5:

10

5

25

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

Insertar 5:

10

5

Insertar 7:

10

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:

10

5

7

14

27

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Para : 10 – 5 – 7 – 14 – 12 – 18 – 15

Insertar 14:

10

5

7

14

Insertar 12:

10

5

7

14

12

28

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Para : 10 – 5 – 7 – 14 – 12 – 18 – 15

Insertar 14:

10

5

7

14

Insertar 12:

10

5

7

14

12

Insertar 18:

18

10

5

7

14

12

29

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Para : 10 – 5 – 7 – 14 – 12 – 18 – 15

InOrden: 5 – 7 – 10 – 12 – 14 – 15 - 18

Insertar 15:

18

10

5

7

14

12

15

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

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:

15

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:

15

Insertar 18:

15

18

33

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

Insertar 18:

15

18

Insertar 4:

15

184

34

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Para: 15 – 18 – 4 – 5 – 10 – 12 – 7

Insertar 5:

15

4

5

18

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

4

5

18

Insertar 10:

15

4

5

18

10

36

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Para: 15 – 18 – 4 – 5 – 10 – 12 – 7

Insertar 5:

15

4

5

18

Insertar 10:

15

4

5

18

10

Insertar 12:

12

15

4

5

18

10

37

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Para: 15 – 18 – 4 – 5 – 10 – 12 – 7Insertar 7:

12

15

4

5

18

10

7

InOrden: 4 – 5 – 7 – 10 – 12 – 15 – 18

38

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – InsertarNodo – Implementación

Es una extensión de la operación de Búsqueda– Si el árbol está vacío se inserta directamente– SINO: Buscará en el árbol el lugar correcto de Inserción

void InsertarNodo (Nodo** raiz, TipoElemento dato) if (!(*raiz))

*raiz = CrearNodo(dato);else if (dato < (*raiz) >dato)

InsertarNodo(&((*raiz) >izdo), dato);else

InsertarNodo(&((*raiz) >dcho), dato);

Es una extensión de la operación de Búsqueda– Si el árbol está vacío se inserta directamente– SINO: Buscará en el árbol el lugar correcto de Inserción

void InsertarNodo (Nodo** raiz, TipoElemento dato) if (!(*raiz))

*raiz = CrearNodo(dato);else if (dato < (*raiz) >dato)

InsertarNodo(&((*raiz) >izdo), dato);else

InsertarNodo(&((*raiz) >dcho), dato); Autor: Ing Rolando Simon Titiosky

39

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – InsertarNodo – Implementación 2

void InsertarNodo_2 (tAB **A; tElemento x) if (*A == NULL )

*A = (tAB *) malloc(sizeof(tAB));(*A )->info = x;(*A )->izq = NULL;(*A )->der = NULL;

else if( (*A) -> info > x)

InsertarNodo(&(*A) -> izq, x);else if( (*A) -> info < x)

InsertarNodo(&(*A) -> der, x);else

printf( “Dato repetido “);

void InsertarNodo_2 (tAB **A; tElemento x) if (*A == NULL )

*A = (tAB *) malloc(sizeof(tAB));(*A )->info = x;(*A )->izq = NULL;(*A )->der = NULL;

else if( (*A) -> info > x)

InsertarNodo(&(*A) -> izq, x);else if( (*A) -> info < x)

InsertarNodo(&(*A) -> der, x);else

printf( “Dato repetido “);

40

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

41

Universidad Técnica Federico Santa María - Departamento de Informática

a) Que el nodo sea una hoja:

El TAD ABB – EliminarNodo

42

Universidad Técnica Federico Santa María - Departamento de Informática

b) Que el nodo tenga un hijo:

El TAD ABB – EliminarNodo

43

Universidad Técnica Federico Santa María - Departamento de Informática

c) Que el nodo sea interno:

El TAD ABB – EliminarNodo

44

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:

Suprimir 24

15

9

12

27

21

18

36

24

15

9

12

27

21

18

36

45

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 Final:Árbol Inicial:

15

9

12

27

18 36

Suprimir 21

15

9

12

27

21

18

36

46

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

9

12

27

18 36

12

9 27

18 36

47

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.

Arbol inicial:

24

15

9

12

27

21

18

36

15

9

12

27

21

18

36

Suprimir 24 (caso a):

48

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Arbol inicial:

15

9

12

27

21

18

36

Suprimir 21 (caso b):

15

9

12

27

18 36

49

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Árbol inicial:Suprimir 15 (caso c):

Dos soluciones posibles :

12

9 27

18 36

15

9

12

27

18 3618

9

12

27

36

50

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Árbol inicial: Suprimir 27 (caso c):

12

9 18

36

12

9 27

18 36

51

Universidad Técnica Federico Santa María - Departamento de Informática

ABB – Ejercicios

Arbol inicial: Suprimir 12 (caso c):

9

18

36

12

9 18

36

52

Universidad Técnica Federico Santa María - Departamento de Informática

void eliminar (Nodo** r, TipoElemento dato) if (!(*r))

puts("Nodo no encontrado");else if (dato < (*r) -> dato)

eliminar(&(*r) ->izdo, dato);else if (dato > (*r) ->dato)

eliminar(&(*r) ->dcho,dato);else /* Nodo encontrado */

Nodo* q; /* puntero al nodo a suprimir */q = (*r); /* r es el ptr del nodo Padre */if (q ->izdo == NULL)

(*r) = q >dcho;else if (q ->dcho == NULL)

(*r) = q ->izdo;else /* tiene rama izquierda y derecha */

reemplazar(&q);free(q);

void eliminar (Nodo** r, TipoElemento dato) if (!(*r))

puts("Nodo no encontrado");else if (dato < (*r) -> dato)

eliminar(&(*r) ->izdo, dato);else if (dato > (*r) ->dato)

eliminar(&(*r) ->dcho,dato);else /* Nodo encontrado */

Nodo* q; /* puntero al nodo a suprimir */q = (*r); /* r es el ptr del nodo Padre */if (q ->izdo == NULL)

(*r) = q >dcho;else if (q ->dcho == NULL)

(*r) = q ->izdo;else /* tiene rama izquierda y derecha */

reemplazar(&q);free(q);

Implementación de EliminarNodo

Autor: Ing Rolando Simon Titiosky

53

Universidad Técnica Federico Santa María - Departamento de Informática

void reemplazar(Nodo** act) Nodo* a, *p;p = *act;a = (*act) ->izdo; /* menores a IZQ*/while (a ->dcho)

p = a; /* buscar el Mayor a DER*/a = a ->dcho;

/* Cambio del campo Datos */(*act) ->dato = a ->dato;/* Al Abuelo p, se hace cargo de nieto IZQ */if (p == (*act))

p ->izdo = a ->izdo;else

p ->dcho = a ->izdo;(*act) = a;

void reemplazar(Nodo** act) Nodo* a, *p;p = *act;a = (*act) ->izdo; /* menores a IZQ*/while (a ->dcho)

p = a; /* buscar el Mayor a DER*/a = a ->dcho;

/* Cambio del campo Datos */(*act) ->dato = a ->dato;/* Al Abuelo p, se hace cargo de nieto IZQ */if (p == (*act))

p ->izdo = a ->izdo;else

p ->dcho = a ->izdo;(*act) = a;

Implementación de EliminarNodo

54

Universidad Técnica Federico Santa María - Departamento de Informática

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

Otras Operaciones del TAD ABB

55

Universidad Técnica Federico Santa María - Departamento de Informática

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:

Análisis de la complejidad de un ABB

18

9

15

27

2112 36

h(A) = ( 1 + log2(7) ) ≈ 3

56

Universidad Técnica Federico Santa María - Departamento de Informática

Pueden ocurrir situaciones muy desfavorables:

18

27

41

36

92

Así, insertar un elemento i-ésimo toma O(i)

Análisis de la complejidad de un ABB

57

Universidad Técnica Federico Santa María - Departamento de Informática

Luego, el proceso de n inserciones toma :

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.

Análisis de la complejidad de un ABB

⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎠⎞

⎜⎝⎛ +

=∑= 2

1

1

nnOiOn

i

58

Universidad Técnica Federico Santa María - Departamento de Informática

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.

Ejercicios

59

Universidad Técnica Federico Santa María - Departamento de Informática

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)

Ejercicios

60

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 andSorting. 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, Addison-Wesley Iberoamericana, 1995.

• http://www.lcc.uma.es/~galvez/ftp/tad/tadtema4.pdf

61

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/08-

09/arboles_binarios_de_busqueda.pdf• http://usuarios.multimania.es/sanjudas/download/ResumenArboles

.pdf