You are on page 1of 15

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA

PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

CLAVE DE LA ASIGNATURA PARA-ES

CUATRIMESTRE 8

NOMBRE DE LA ASIGNATURA PROGRAMACIN AVANZADA

NMERO DE PRCTICA 1

NOMBRE RBOLES

DURACIN (HORAS) 4

INTRODUCCIN: Un rbol es una estructura de datos ramificada (no lineal) que puede representarse como un conjunto de nodos enlazados entre s por medio de ramas. La informacin contenida en un nodo puede ser de cualquier tipo simple o estructura de datos. Los rboles permiten modelar diversas entidades del mundo real tales como, por ejemplo, el ndice de un libro, la clasificacin del reino animal, el rbol genealgico de un apellido, el desarrollo de una expresin aritmtica o el manejo de rutas de una lnea area.

OBJETIVO: Conocer el manejo de las estructuras jerrquicas para el desarrollo de aplicaciones informticas que resuelvan problemas de bsqueda de soluciones.

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 1

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

TEORA: Los rboles representan las estructuras no lineales y dinmicas de datos ms importantes encomputacin. Dinmicas porque las estructuras de rbol pueden cambiar durante la ejecucin de unprograma. No lineales, puesto que a cada elemento del rbol pueden seguirle varios elementos. Los rboles pueden ser construidos con estructuras estticas y dinmicas. Las estticas son arreglos,registros y conjuntos, mientras que las dinmicas estn representadas por listas. La definicin de rbol es la siguiente: es una estructura jerrquica aplicada sobre una coleccin deelementos u objetos llamados nodos; uno de los cuales es conocido como raz. Adems se crea unarelacin o parentesco entre los nodos dando lugar a trminos como padre, hijo, hermano, antecesor,sucesor, ancestro, etc. Formalmente se define un rbol de tipo T como una estructura homognea que es la concatenacin deun elemento de tipo T junto con un nmero finito de rboles disjuntos, llamados subrboles. Una formaparticular de rbol puede ser la estructura vaca.

Se utiliza la recursin para definir un rbol porque representa la forma ms apropiada y porque ademses una caracterstica inherente de los mismos. Caractersticas y propiedades de los rboles. a) Todo rbol que no es vaco, tiene un nico nodo raz. b) Un nodo X es descendiente directo de un nodo Y, si el nodo X es apuntado por el nodo Y. en este caso es comn utilizar la expresin X es hijo de Y.

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 2

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

c) Un nodo X es antecesor directo de un nodo Y, si el nodo X apunta al nodo Y. en este caso es comn utilizar la expresin X es padre de Y. d) Se dice que todos los nodos que son descendientes directos (hijos) de un mismo nodo (padre), son hermanos. e) Todo nodo que no tiene ramificaciones (hijos), se conoce con el nombre de terminal u hoja. f) Todo nodo que no es raz, ni terminal u hoja se conoce con el nombre de interior.

g) Grado es el nmero de descendientes directos de un determinado nodo. Grado del rbol es el mximo grado de todos los nodos del rbol, es decir, el grado ms alto entre todos los nodos. h) Nivel es el nmero de arcos que deben ser recorridos para llegar a un determinado nodo. Por definicin la raz tiene nivel 1. i) Altura del rbol es el mximo nmero de niveles de todos los nodos del rbol.

Arboles binarios Los rboles binarios constituyen un tipo particular de rboles de gran aplicacin. Estos rboles secaracterizan porque no existen nodos con grado mayor que dos, es decir, un nodo tendr comomximo dos subrboles.

Definicin: Un rbol binario es un conjunto finito de nodos que puede estar vaco o consistiren un nodo raz y dos rboles binarios disjuntos, llamados subrbol izquierdo ysubrbol derecho.En general, en un rbol no se distingue entre los subrboles de un nodo, mientras que en un rbolbinario se suele utilizar la nomenclatura subrbol izquierdo y derecho para identificar los dosposibles subrboles de un nodo determinado.

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 3

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

Operaciones comunes en rboles Enumerar todos los elementos. Buscar un elemento. Aadir un nuevo elemento, en una cierta posicin del rbol. Borrar un elemento. Eliminar una seccin completa de un rbol (llamado podar). Aadir una seccin completa a un rbol (llamado injertar). Encontrar la raz de cualquier nodo.

Recorridos Se entiende por recorrido el tratamiento realizado para acceder a los diferentes nodos de un rbol. El recorrido puede afectar a la totalidad de los nodos del rbol (recorrido completo), por ejemplo si se desea conocer el nmero de nodos, o finalizar anticipadamente en funcin de determinada/s circunstancia/s, por ejemplo al encontrar el valor de una clave determinada. En cualquier caso, el recorrido se puede realizar basndose en las siguientes modalidades: a) Recorrido preorden Visitar la raz Recorrer el subrbol izquierdo Recorrer el subrbol derecho Algoritmo NODO es un dato de tipo puntero. INFO, IZQ y DER son campos del registro nodo. INFO es una variable de tipo carcter, IZQ y DER son variables de tipo puntero. 1. Si NODO NULLentonces Visitar el NODO {Escribir NODO^.INFO} Regresar a PREORDEN con NODO^.IZQ {Llamada recursiva a preorden con la rama izquierda del nodo en cuestin} Regresa a PREORDEN con NODO^.DER {Llamada recursiva a preorden con la rama derecha del nodo en cuestin} 2. Fin del condicional del paso 1

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 4

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

b) Recorrido inorden Recorrer el subrbol izquierdo Visitar la raz Recorrer el subrbol derecho Algoritmo NODO es un dato de tipo puntero. INFO, IZQ y DER son campos del registro nodo. INFO es una variable de tipo carcter, IZQ y DER son variables de tipo puntero. 1. Si NODO NULLentonces Regresar a INORDEN con NODO^.IZQ {Llamada recursiva a inorden con la rama izquierda del nodo en cuestin} Visitar el NODO {Escribir NODO^.INFO} Regresa a INORDEN con NODO^.DER {Llamada recursiva a inorden con la rama derecha del nodo en cuestin} 2. Fin del condicional del paso 1 c) Recorridopostorden Recorrer el subrbol izquierdo Recorrer el subrbol derecho Visitar la raz

Algoritmo NODO es un dato de tipo puntero. INFO, IZQ y DER son campos del registro nodo. INFO es una variable de tipo carcter, IZQ y DER son variables de tipo puntero. 3. Si NODO NULLentonces Regresar a POSTORDEN con NODO^.IZQ {Llamada recursiva a postorden con la rama izquierda del nodo en cuestin} Regresa a POSTORDEN con NODO^.DER {Llamada recursiva a postorden con la rama derecha del nodo en cuestin} Visitar el NODO {Escribir NODO^.INFO} 4. Fin del condicional del paso 1

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 5

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

DESARROLLO:

1. A continuacin desarrollamos una clase para la administracin de un rbol binario ordenado. public class ArbolBinarioOrdenado { classNodo { intinfo; Nodo izq, der; } Nodo raiz; publicArbolBinarioOrdenado() { raiz=null; } public void insertar (int info) { Nodo nuevo; nuevo = new Nodo (); nuevo.info = info; nuevo.izq = null; nuevo.der = null; if (raiz == null) raiz = nuevo; else { Nodo anterior = null, reco; reco = raiz; while (reco != null) { anterior = reco; if (info< reco.info) reco = reco.izq; else reco = reco.der; } if (info< anterior.info) anterior.izq = nuevo;

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 6

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

else anterior.der = nuevo; } } privatevoidimprimirPre (Nodo reco) { if (reco != null) { System.out.print(reco.info + " "); imprimirPre (reco.izq); imprimirPre (reco.der); } } publicvoidimprimirPre () { imprimirPre (raiz); System.out.println(); } privatevoidimprimirEntre (Nodoreco) { if (reco != null) { imprimirEntre (reco.izq); System.out.print(reco.info + " "); imprimirEntre (reco.der); } } publicvoidimprimirEntre () { imprimirEntre (raiz); System.out.println(); } private void imprimirPost (Nodoreco) { if (reco != null) { imprimirPost (reco.izq); imprimirPost (reco.der);
ELABORO: M. en D. Bibiana Prez Castillo Prez REVISO: Pgina | 7

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

System.out.print(reco.info + " "); } } publicvoidimprimirPost () { imprimirPost (raiz); System.out.println(); } public static void main (String [] ar) { ArbolBinarioOrdenadoabo = new ArbolBinarioOrdenado (); abo.insertar (100); abo.insertar (50); abo.insertar (25); abo.insertar (75); abo.insertar (150); System.out.println ("Impresionpreorden: "); abo.imprimirPre (); System.out.println ("Impresionentreorden: "); abo.imprimirEntre (); System.out.println ("Impresionpostorden: "); abo.imprimirPost (); } }

2. Se confecciono una clase que permita insertar un entero en un rbol binario ordenado verificando que no se encuentre previamente dicho nmero.Se han desarrollado los siguientes mtodos: Retornar la cantidad de nodos del rbol. Retornar la cantidad de nodos hoja del rbol. Imprimir en entre orden. Imprimir en entre orden junto al nivel donde se encuentra dicho nodo. Retornar la altura del rbol. Imprimir el mayor valor del rbol. Borrar el nodo menor del rbol.

public class ArbolBinarioOrdenado {


ELABORO: M. en D. Bibiana Prez Castillo Prez REVISO: Pgina | 8

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

classNodo { intinfo; Nodo izq, der; } Nodoraiz; intcant; intaltura; publicArbolBinarioOrdenado() { raiz=null; } publicvoid insertar (intinfo) { if (!existe(info)) { Nodo nuevo; nuevo = new Nodo (); nuevo.info = info; nuevo.izq = null; nuevo.der = null; if (raiz == null) raiz = nuevo; else { Nodo anterior = null, reco; reco = raiz; while (reco != null) { anterior = reco; if (info< reco.info) reco = reco.izq; else reco = reco.der; } if (info< anterior.info) anterior.izq = nuevo; else anterior.der = nuevo; }
ELABORO: M. en D. Bibiana Prez Castillo Prez REVISO: Pgina | 9

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

} } publicbooleanexiste(int info) { Nodo reco=raiz; while (reco!=null) { if (info==reco.info) return true; else if (info>reco.info) reco=reco.der; else reco=reco.izq; } return false; } private void imprimirEntre (Nodoreco) { if (reco != null) { imprimirEntre (reco.izq); System.out.print(reco.info + " "); imprimirEntre (reco.der); } } publicvoidimprimirEntre () { imprimirEntre (raiz); System.out.println(); } privatevoidcantidad(Nodoreco) { if (reco!=null) { cant++; cantidad(reco.izq); cantidad(reco.der); } }
ELABORO: M. en D. Bibiana Prez Castillo Prez REVISO: Pgina | 10

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

publicintcantidad() { cant=0; cantidad(raiz); return cant; } privatevoidcantidadNodosHoja(Nodo reco) { if (reco!=null) { if (reco.izq==null &&reco.der==null) cant++; cantidadNodosHoja(reco.izq); cantidadNodosHoja(reco.der); } } publicintcantidadNodosHoja() { cant=0; cantidadNodosHoja(raiz); return cant; } privatevoidimprimirEntreConNivel (Nodo reco,int nivel) { if (reco != null) { imprimirEntreConNivel (reco.izq,nivel+1); System.out.print(reco.info + " ("+nivel+") - "); imprimirEntreConNivel (reco.der,nivel+1); } } publicvoidimprimirEntreConNivel () { imprimirEntreConNivel (raiz,1); System.out.println(); } privatevoidretornarAltura (Nodo reco,int nivel) if (reco != null) { retornarAltura (reco.izq,nivel+1); if (nivel>altura)
ELABORO: M. en D. Bibiana Prez Castillo Prez REVISO: Pgina | 11

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

altura=nivel; retornarAltura (reco.der,nivel+1); } } publicintretornarAltura () { altura=0; retornarAltura (raiz,1); return altura; } public void mayorValorl() { if (raiz!=null) { Nodo reco=raiz; while (reco.der!=null) reco=reco.der; System.out.println("Mayor valor del rbol:"+reco.info); } } public void borrarMenor() { if (raiz!=null) { if (raiz.izq==null) raiz=raiz.der; else { Nodo atras=raiz; Nodo reco=raiz.izq; while (reco.izq!=null) { atras=reco; reco=reco.izq; } atras.izq=reco.der; } } }

public static void main (String [] ar)


ELABORO: M. en D. Bibiana Prez Castillo Prez REVISO: Pgina | 12

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

{ ArbolBinarioOrdenadoabo = new ArbolBinarioOrdenado (); abo.insertar (100); abo.insertar (50); abo.insertar (25); abo.insertar (75); abo.insertar (150); System.out.println ("Impresionentreorden: "); abo.imprimirEntre (); System.out.println ("Cantidad de nodos del rbol:"+abo.cantidad()); System.out.println ("Cantidad de nodos hoja:"+abo.cantidadNodosHoja()); System.out.println ("Impresion en entre orden junto al nivel del nodo."); abo.imprimirEntreConNivel(); System.out.print ("Artura del arbol:"); System.out.println(abo.retornarAltura()); abo.mayorValorl(); abo.borrarMenor(); System.out.println("Luego de borrar el menor:"); abo.imprimirEntre (); } }

ACTIVIDADES COMPLEMENTARIAS:

1. Realizar los diagramas de flujo y diagramas de clase justifiquen la especificacin de los procesos realizados por los programas presentados en los Ejemplos 1 y 2. 2. En base al grafo de la figura siguiente, genere una aplicacin en Java que realice los recorridos en amplitud, profundidad y costo uniforme para el rbol de expansin generado para dicho grafo.

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 13

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

CONCLUSIONES:

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 14

UNIVERSIDAD POLITCNICA DEL VALLE DE MXICO INGENIERA EN INFORMTICA


PRACTICA 1:MANEJO DE ESTRUCTURAS JERRQUICAS

BIBLIOGRAFA: 1. Caro, O., & Guardatii, S. (2006). Estructura de datos. Mc Graw Hill. 2. Ceballos, F. J. (2002). Programacin Java 2. Mxico: Alfaomega. 3. Franch, X. (2002). Estructura de Datos: Especificacin, Diseo e Implementacin. Alfaomega. 4. Loomis, M. E. (1990). Estructura de datos y Organizacin de archivos. Prentice Hall.

ELABORO: M. en D. Bibiana Prez Castillo Prez

REVISO: Pgina | 15