Vous êtes sur la page 1sur 7

.

Estructuras de Datos
Tema 1. Programacin Imperativa de Computadores Tema 2. Fundamentos de Complejidad Algortmica Tema 3. Estructuras de datos jerrquicas Tema 4. concepto y especificacin de Tipos Abstractos de Datos (TADs) Tema 5. Estructuras de datos lineales Tema 6. Estructuras de datos jerrquicas

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

1
.

Bibliografa
Sahni, Sartaj, "Data structures, algorithms, and applications in Java". McGraw Hill, 2000 Weiss, Mark Allen, "Estructuras de datos y algoritmos". AddisonWesley Iberoamericana, 1995. Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman, "Data structures and algorithms". Addison-Wesley, 1983. Weiss, Mark Allen, "Estructuras de datos en Java : compatible con Java 2". Addison-Wesley, 2000 Michael T. Goodrich, Roberto Tamassia, "Data structures and algorithms in Java". John Wiley & Sons, 2006.

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

2
.

Objetivos
Conocer el tipo abstracto de datos rbol Saber usar el tipo abstracto de datos rbol

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

Tema 6. Estructuras de datos jerrquicas

Tema 6. Estructuras de datos jerrquicas


1. 2. 3. Introduccin El Tipo abstracto de datos rbol
- Operaciones habituales.

Ejemplos con rboles


- Recorrido. Creacin.

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

4
1. Introduccin

Tema 6. Estructuras de datos jerrquicas

1 Introduccin
Hemos utilizado rboles para implementar algunos TADs: Bolsas, Conjuntos, Colas de Prioridad, Tablas
TAD Conjunto

ConjuntoVector

ConjuntoHash ConjuntorbolAVL

ConjuntorbolRN

ConjuntoListaEnlazada

Distintas implementaciones del TAD


Estructuras de Datos M. Aldea, M. Gonzlez 7/01/12

5
1. Introduccin Introduccin (cont.)

Tema 6. Estructuras de datos jerrquicas

Los rboles tambin constituyen un TAD con numerosas aplicaciones directas: Representacin de todo tipo de estructuras jerrquicas: - Organigrama de empresas - Redes de ordenadores (p.e. Internet) - Sistemas de ficheros - Sistemas de distribucin (luz, agua, telfono, ...) - ... rboles sintcticos para la representacin y/o interpretacin de trminos de un lenguaje (de programacin) Representacin y/o interpretacin de expresiones aritmticas Inteligencia Artificial y Juegos ...
M. Aldea, M. Gonzlez 7/01/12

Estructuras de Datos

Tema 6. Estructuras de datos jerrquicas

2. El Tipo abstracto de datos rbol

2 El Tipo abstracto de datos rbol


Veremos un rbol genrico: Nmero ilimitado de hijos en cada nodo

Operaciones del rbol:


operacin
constructor hazNulo estaVacio iterador booleano IteradorDeArbol

argumentos
Elemento rbol

retorna

errores

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

Tema 6. Estructuras de datos jerrquicas

2. El Tipo abstracto de datos rbol

El Iterador de rboles
La mayora de las operaciones se encuentran en el iterador de rboles, que contiene una referencia a uno de los nudos del rbol - inicialmente es la raz - si la referencia es nula, se dice que el iterador no es vlido puede usarse para recorrer y/o modificar el rbol si el iterador no es vlido, casi todas las operaciones lanzan NoValido

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

Tema 6. Estructuras de datos jerrquicas

2. El Tipo abstracto de datos rbol

Operaciones del iterador de rboles: operaciones de modificacin


operacin
constructor insertaPrimerHijo

argumentos
elArbol Elemento

retorna
IteradorDeArbol

errores
NoValido EsRaiz, NoValido

insertaSiguienteHermano Elemento eliminaHoja modificaElemento cortaRama reemplazaRama anadeRama Nueva Rama Nueva Rama Elemento Elemento Elemento viejo Rama cortada Rama cortada

NoEsHoja, NoValido NoValido NoValido NoValido NoValido

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

Tema 6. Estructuras de datos jerrquicas

2. El Tipo abstracto de datos rbol

Notas:
constructor: Crea el iterador del rbol, con el nudo actual igual a la raz, o no vlido si el rbol est vaco insertaPrimerHijo: Aade un hijo al nudo actual, situado ms a la izquierda que los actuales, y con el valor indicado insertaSiguienteHermano: Aade un hijo al padre del nudo actual, situndolo inmediatamente a la derecha del nudo actual. Lanza EsRaiz si se intenta aadir un hermano a la raz eliminaHoja: Si el nudo actual es una hoja, la elimina del rbol y hace que el nudo actual sea su padre. Si no es una hoja, lanza NoEsHoja. modificaElemento: Modifica el contenido del nudo actual reemplazndolo por el elementoNuevo. Retorna el antiguo contenido del nudo actual cortaRama: Elimina la rama del rbol cuya raz es en nudo actual, y hace que el nudo actual sea su padre. Retorna la rama cortada como un rbol independiente. reemplazaRama: reemplaza la rama del rbol cuya raz es el nudo actual, sustituyndola por nuevaRama; la posicin actual no cambia, y ser por tanto la raz de nuevaRama en el rbol actual. Retorna la rama que ha sido reemplazada como un rbol independiente. anadeRama: Aade el rbol indicado por nuevaRama haciendo que su raz sea hija del nudo actual, situndola a la derecha de los hijos actuales, si los hay

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

10

Tema 6. Estructuras de datos jerrquicas

2. El Tipo abstracto de datos rbol

Operaciones del iterador de rboles: operaciones de consulta y recorrido


operacin
irARaiz irAPrimerHijo irASiguienteHermano irAPadre contenido esHoja esRaiz esUltimoHijo esValido clonar Elemento Booleano Booleano Booleano Booleano IteradorDeArbol NoValido NoValido NoValido NoValido NoValido NoValido NoValido

argumentos

retorna

errores

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

11

Tema 6. Estructuras de datos jerrquicas

2. El Tipo abstracto de datos rbol

Notas:
contenido: retorna el elemento contenido en el nudo actual iaARaiz: hace que el nudo actual sea la raz del rbol; valdr no vlido si el rbol est vaco irAPrimerHijo: hace que el nudo actual sea el primer hijo del actual; valdr no vlido si el nudo actual no tiene hijos irASiguienteHermano: hace que el nudo actual sea el siguiente hermano del actual; valdr no vlido si el nudo actual no tiene hermanos derechos irAPadre: hace que el nudo actual sea el padre del actual; valdr no vlido si el nudo actual era la raz esHoja: retorna un booleano que indica si el nudo actual es una hoja o no (es decir si no tiene hijos) esRaiz: retorna un booleano que indica si el nudo actual es la raz del rbol esUltimoHijo: retorna un booleano que indica si el nudo actual es el ltimo hijo de su padre (es decir si no tiene hermanos derechos) esValido: retorna un booleano que indica si el nudo actual es vlido, o no clonar: retorna un iterador de rbol que es una copia del actual

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

12

Tema 6. Estructuras de datos jerrquicas

3. Ejemplos con rboles

3 Ejemplos con rboles


1. Escribir mtodos para mostrar el rbol en preorden, postorden e inorden

2. Escribir un programa para crear un rbol que represente una expresin, comenzando por la raz y descendiendo a las hojas

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

13
3. Ejemplos con rboles

Tema 6. Estructuras de datos jerrquicas

Ejemplo 1: mostrar en preorden


public static <E> void muestraEnPreorden (IteradorDeArbol<E> iterador) { IteradorDeArbol<E> iter= iterador.clone(); System.out.print(iter.contenido()+" "); iter.irAPrimerHijo(); while (iter.esValido()) { muestraEnPreorden(iter); iter.irASiguienteHermano(); } }

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

14
3. Ejemplos con rboles

Tema 6. Estructuras de datos jerrquicas

Ejemplo 1: mostrar en postorden


public static <E> void muestraEnPostorden (IteradorDeArbol<E> iterador) { IteradorDeArbol<E> iter= iterador.clone(); E contenidoRaiz=iter.contenido(); iter.irAPrimerHijo(); while (iter.esValido()) { muestraEnPostorden(iter); iter.irASiguienteHermano(); } System.out.print(contenidoRaiz+" "); }

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

15

Tema 6. Estructuras de datos jerrquicas

3. Ejemplos con rboles

Ejemplo 1: mostrar en inorden


public static <E> void muestraEnInorden (IteradorDeArbol<E> iterador) { IteradorDeArbol<E> iter= iterador.clone(); E contenidoRaiz=iter.contenido(); if (iter.esHoja()) { System.out.print(contenidoRaiz); } else { System.out.print("("); iter.irAPrimerHijo(); muestraEnInorden(iter); System.out.print(contenidoRaiz); iter.irASiguienteHermano(); while (iter.esValido()) { muestraEnInorden(iter); iter.irASiguienteHermano(); } System.out.print(")"); } }
Estructuras de Datos M. Aldea, M. Gonzlez 7/01/12

16
3. Ejemplos con rboles

Tema 6. Estructuras de datos jerrquicas

Ejemplo 2: Creacin del rbol


Usaremos las clases: - ElementoDeExpresion: superclase de todos los elementos - Operador: representa un operador aritmtico - Variable: representa un operando variable - Constante: representa un operando constante literal
ElementoDeExpresin

Operando Operador valor: real operador: char

Variable nombre: texto


M. Aldea, M. Gonzlez 7/01/12

Constante

Estructuras de Datos

17
3. Ejemplos con rboles

Tema 6. Estructuras de datos jerrquicas

Ejemplo 2: Creacin del rbol (cont.)

La expresin es: 3*x-base/2


-

base

// crear los operadores y operandos Operador resta = new Operador('-'); Operador mult = new Operador('*'); Operador div = new Operador('/'); Variable x =new Variable("x",1); Variable base =new Variable("base",1); Constante dos =new Constante(2); Constante tres =new Constante(3);
Estructuras de Datos M. Aldea, M. Gonzlez 7/01/12

18

Tema 6. Estructuras de datos jerrquicas

3. Ejemplos con rboles Ejemplo 2: Creacin del rbol (cont.)

Arbol<ElementoDeExpresion> arbol= new ArbolCE<ElementoDeExpresion>(resta); IteradorDeArbol<ElementoDeExpresion> iter= arbol.iterador(); iter.insertaPrimerHijo(mult); iter.irAPrimerHijo(); // mult iter.insertaPrimerHijo(tres); iter.irAPrimerHijo(); // tres iter.insertaSiguienteHermano(x); iter.irAPadre(); // mult iter.insertaSiguienteHermano(div); iter.irASiguienteHermano(); // div iter.insertaPrimerHijo(base); iter.irAPrimerHijo(); // base iter.insertaSiguienteHermano(dos); iter.irARaiz();

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

19
3. Ejemplos con rboles

Tema 6. Estructuras de datos jerrquicas

Ejemplo 2: Creacin del rbol (cont.)

// mostrar el arbol en preorden System.out.println("Arbol en preorden:"); OpArboles.muestraEnPreorden(iter); System.out.println();

Estructuras de Datos

M. Aldea, M. Gonzlez 7/01/12

20

Vous aimerez peut-être aussi