Está en la página 1de 3

Laboratorio de Programacin 1A E.T.S.I.

Informtica Gestin

Prctica 19: rboles


Teora.

Binarios en C++

Las estructuras dinmicas vistas hasta ahora son lineales (listas enlazadas, pilas, colas). Estas estructuras tienen grandes ventajas en cuanto a flexibilidad sobre las representaciones contiguas, pero tienen un punto dbil: son listas secuenciales, es decir, estn dispuestas de forma que es necesario recorrer cada posicin al menos una vez (cada elemento tiene un sucesor). Mediante los rboles binarios se introduce el concepto de estructura de bifurcacin, donde cada elemento puede tener ms de un posible 'siguiente', con lo cual es posible resolver algunos problemas de difcil solucin cuando se usan estructuras dinmicas lineales. El rbol es una estructura muy usada en todos los mbitos de la informtica ya que se adapta a la representacin natural de informaciones homogneas organizadas y de una gran comodidad y rapidez de manipulacin. Las estructuras tipo rbol se usan para representar datos con una relacin jerrquica entre sus elementos, como son rboles genealgicos, tablas, etc. Un rbol se define como un conjunto finito de uno o ms nodos relacionados de la siguiente forma: Hay un nodo especial llamado raz del rbol, que proporciona un punto de entrada a la estructura. Los nodos restantes se subdividen en m>=0 conjuntos disjuntos, cada uno de los cuales es a su vez un rbol. Estos rboles se llaman subrboles del raz. Ntese que esta definicin es recursiva, se define un rbol en funcin de otros rboles. La representacin y terminologa de los rboles se realiza con las tpicas notaciones de las relaciones familiares en los rboles genealgicos: padre, hijo, hermano, ascendiente, descendiente. Junto a estos conceptos se definen otros tales como raz, nodo, hoja, camino, nivel, profundidad, etc., con los cuales se supone familiarizado al alumno.

1 2 4 5 9
Un rbol Binario se define como un conjunto de 0 ms nodos tales que: Existe un nodo llamado raz del rbol. Cada nodo puede tener 0,1, 2 subrboles conocidos como subrbol izquierdo y subrbol derecho. Un rbol binario puede ser representado fcilmente eligiendo las estructuras de datos adecuadas. Un rbol general puede transformarse en un rbol binario aplicando determinados algoritmos de conversin, el resto del epgrafe se centrar en el estudio de los rboles binarios. La representacin dinmica de un rbol binario utiliza variables punteros y asignacin dinmica de espacios de memoria. Cada nodo del rbol contiene al menos los siguientes campos: Campo de datos que almacena el tipo de datos. Puntero al subrbol izquierdo. Puntero al subrbol derecho. Se llama recorrido de un rbol binario al proceso que permite acceder una sola vez a cada uno de los nodos del rbol. Cuando un rbol se recorre, el conjunto completo de nodos se examina. Los algoritmos de recorrido de un rbol realizan las siguientes tareas comunes: Procesar el nodo raz. Recorrer el subrbol izquierdo. Recorrer el subrbol derecho.

3 6 7 8

Jos Luis Pastrana Brincones @ 2004 1

Laboratorio de Programacin 1A E.T.S.I. Informtica Gestin

El orden en que se realizan estas acciones da nombre a los tres algoritmos ms usuales: pre-orden, in-orden y post-orden: void inOrden(TArbol a) { if (!arbolVacio(a)) { inOrden(Izda(a)); procesar(a); inOrden(Decha(a)); } } void preOrden(TArbol a) { if (!arbolVacio(a)) { procesar(a); preOrden(Izda(a)); preOrden(Decha(a)); } } void postOrden(TArbol a) { if (!arbolVacio(a)) { postOrden(Izda(a)); postOrden(Decha(a)); procesar(a); } }

En cuanto a las operaciones aplicables a un rbol binario se muestran en el mdulo de implementacin Marbol las siguientes: - crearVacio: Devuelve un rbol binario vaco. - crearRaiz: Crea el nodo raz de un rbol, y almacena en este nodo el valor que se le pasa como parmetro a la funcin. - crearIzda: Dado un rbol binario que no tiene desarrollada su rama izquierda, esta funcin crea un nodo con el valor que se recibe como argumento, y se asigna a la rama izquierda del rbol binario original. - crearDcha: Es similar al procedimiento anterior pero aplicable a la rama derecha. - sacarRaiz: Esta funcin devuelve el valor de la raz de un rbol binario. - arbolVacio: Determina si un rbol binario est o no vaco. - destruirArbol. Libera la memoria utilizada por el rbol. Hace un recorrido en postorden. rboles binarios de bsqueda: es un rbol binario en el que el subrbol izquierdo de cualquier nodo (si no est vaco) contiene valores menores que el que contiene dicho nodo, y el subrbol derecho (si no est vaco) contiene valores mayores. Prctica Se desea realizar un programa para llevar la c ontabilidad de existencias de productos en un supermercado. De cada producto, se almacenar su nombre y el nmero de unidades existentes de la misma. Para una mayor eficiencia, se decide usar un rbol binario de bsqueda. El programa deber presentar el siguiente men: MENU SUPERMERCADO -----------------Autor: <Apellidos> <Nombre> A. Inserta producto en el supermercado. B. Busca una producto en el supermercado. C. Eliminar producto del supermercado. D. Modifica producto del supermercado. E. Listar producto supermercado. X. Salir del Programa. Introduzca Opcin: Nota. Se debern tener los siguientes Mdulos: MCadena (manejo de cadenas de caracteres), MProducto (manejo de los productos), MABB (mdulo del rbol binario de bsqueda) y programa principal..

Jos Luis Pastrana Brincones @ 2004 2

Laboratorio de Programacin 1A E.T.S.I. Informtica Gestin La parte de definicin del Mdulo de productos ser la siguiente: #ifndef _MPRODUCTO_H_ #define _MPRODUCTO_H_ #include "MCadena.h" namespace MProducto { using namespace MCadena; typedef unsigned int TNatural; struct TProducto { TCadena producto; // Clave del registro TNatural ctd; };

TCompara ComparaProducto(TProducto p1, TProducto p2); TProducto LeerProducto(); void EscribirProducto(TProducto p); } #endif

Jos Luis Pastrana Brincones @ 2004 3

También podría gustarte