You are on page 1of 4

Prcticas de rboles Binarios

1. Recorridos en rboles Binarios


Utilizando la representacin de rboles binarios mediante punteros implementar los
recorridos en profundidad y en amplitud. El recorrido en amplitud debe utilizar el TAD
Cola implementado en la prctica anterior, ajustndolo de forma que los elementos de la
cola sean punteros a nodos de rboles binarios.
Ayuda para la realizacin de la prctica
Para comprobar el correcto funcionamiento de las funciones implementadas en la prctica es
necesario generar un rbol binario al cual aplicarle las diferentes operaciones. Para ello
puede utilizarse el fichero prueba.c que construye el rbol ejemplo de las transparencias de
recorridos y que se muestra en la siguientes figura.

Estructuras de Datos y Algoritmos II


Mara Jos Polo
Curso 2014-2015

2. TAD rbol Binario


A continuacin se definen una serie de operaciones sobre rboles binarios. Deben
implementarse todas ellas mediante algoritmos recursivos ajustndose a los tipos y
prototipos que se adjuntan en el fichero cabecera (arbol.h).
altura(a): calcula y devuelve la altura de un rbol binario con raz a, es decir, el
nmero de aristas en el camino ms largo desde el nodo raz hasta una hoja, teniendo
en cuenta que los nodos hoja tienen altura 0.
numNodos(a): calcula y devuelve el nmero de nodos del rbol binario con raz a.
numNodosHoja(a): calcula y devuelve el nmero de nodos hoja del rbol binario a.
numNodosInternos(a): calcula y devuelve el nmero de nodos internos del rbol
binario a.
numHijonico(a): calcula y devuelve el nmero de nodos del rbol a que tienen un
slo hijo.
sustituye(a,x,y): busca en el rbol a los nodos que contienen el valor x en el campo
de informacin, sustituye este valor por y y devuelve el nmero de sustituciones
realizadas.
buscarMax(a)/buscarMin(a): busca y devuelve el nodo del rbol binario a que
contiene el valor mximo/mnimo en su campo de informacin.
anula(a): convierte el rbol a en un rbol vaco (si inicialmente no lo era), liberando
la memoria que ocupan sus nodos.
similares(a1,a2): comprueba si los rboles a1 y a2 son similares devolviendo
verdadero si lo son y falso en caso contrario. Dos rboles son similares si tienen la
misma estructura.
equilvalentes(a1,a2): comprueba si los rboles a1 y a2 son equivalentes devolviendo
verdadero si lo son y falso en caso contrario. Dos rboles son equivalentes si tienen
la misma estructura y el mismo contenido en sus nodos.
Nota: en la figura del enunciado 3 se observan dos rboles similares pero no
equivalentes.
especular(a): crea un nuevo rbol binario que es la imagen especular del rbol a, es
decir, todos los subrboles derechos se convierten en subrboles izquierdos y
viceversa. En la siguiente figura se muestra un rbol a la izquierda y su imagen
especular a la derecha. Estos dos rboles adems no son ni similares ni equivalentes.

+
A

*
B

*
+

+
E

Estructuras de Datos y Algoritmos II


Mara Jos Polo
Curso 2014-2015

+
C

3. TAD rbol algebraico


Una de las aplicaciones de los rboles binarios es la representacin de expresiones
aritmticas en las cuales los nodos internos representan operadores y los nodos hoja
operandos. Implementar el algoritmo que permite construir un rbol algebraico a partir de de
una expresin aritmtica en notacin postfija correcta (algoritmo transparencia 22 tema 1).
Ejemplo: para la expresin postfija AB+CDE+** el algoritmo debe devolver el rbol de la
izquierda de la siguiente figura (transparencia 21)

+
A

*
B

+
+

2
E

*
3

+
1

En esta prctica se necesita el TAD pila implementado en la prctica anterior ajustndolo de


forma que los elementos de la pila sean punteros a nodos de rboles binarios.
Suponiendo un rbol algebraico correcto y limitando el contenido de sus nodos de forma
que:
los nodos hoja tienen en su campo de informacin algn carcter comprendido entre
el 0 y el 9
los nodos internos se corresponde con alguno de los operadores algebraicos +, - *
Implementar en lenguaje C una funcin recursiva que evale el resultado de la expresin
algebraica que representa el rbol. El prototipo de la funcin debe ser
int evaluar(Arbol a);
Ejemplo: si la funcin evala el rbol de la derecha de la imagen anterior devolver el valor
140
4. Reconstruccin de un rbol binario a partir de sus recorridos
Suponiendo que todos los elementos de un rbol binario son distintos, implementar un
algoritmo que reconstruya un rbol binario a partir de sus recorridos en preorden y en orden.

Estructuras de Datos y Algoritmos II


Mara Jos Polo
Curso 2014-2015

ERRORES TPICOS
Los errores tpicos que se suelen cometer en la implementacin de las funciones recursivas sobre
rboles binarios se pueden resumir en cuatro:
1. No controlar el caso bsico (raiz =null)
2. No devolver el valor (null o int)
3. No recoger el valor que devuelve la funcin
4. Hacer comprobaciones redundantes sobre posibles hijos izquierdos y derechos que
estn resueltas con el caso bsico que debe controlarse obligatoriamente

Normas generales
En la realizacin de las prcticas se deben seguir los siguientes criterios:
1. Es obligatorio utilizar los tipos y prototipos siempre que se proporcionan en el fichero
cabecera. Si no se proporcionan debe crearse el fichero cabecera correspondiente o
aadir al proporcionado los prototipos de todas las funciones que se implementen.
2. La codificacin de las funciones se realizar en un fichero fuente diferente al del
programa principal.
3. Para visualizar el correcto funcionamiento de las operaciones implementadas se debe
crear un fichero de prueba desde el cual se llamar a las funciones implementadas.
4. Se debe crear el correspondiente Makefile para la correcta creacin del fichero
ejecutable.

Estructuras de Datos y Algoritmos II


Mara Jos Polo
Curso 2014-2015

You might also like