Sie sind auf Seite 1von 54

TAD Arbol

Def inicin, implementacin y aplicaciones

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Arboles: conceptos bsicos

ARBOL: Conjunto dinmico con una estructura estrictamente jerrquica Ejemplos:


rbol genealgico estructura de apartados y sub-apartados de un libro estructura sintctica de una frase

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

Arboles: conceptos bsicos

34

76

31

50

22

90

15

2
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

Arboles: conceptos bsicos

Nodo: cada uno de los elementos de un rbol Nodo padre: el nico antecesor directo de un nodo Nodo hijo: descendiente directo de un nodo Raz: antecesor comn de todos los nodos del rbol, que a su vez no tiene antecesores Hoja o nodo terminal: nodo sin descendencia Sub-rbol: conjunto formado por un nodo y todos sus descendientes Arbol nulo: rbol sin nodos

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.4

Arboles: conceptos bsicos


Camino: secuencia de nodos n1 , n2 , . . . , nk tal que ni es el nodo padre de ni+1 , para 1 i < k Longitud de un camino: nmero de nodos que lo forman, salvo el nodo inicial Altura de un nodo: longitud del camino ms largo de ese nodo a una hoja Altura de un rbol: altura del nodo raz Profundidad o nivel de un nodo: longitud del camino de la raz a ese nodo Grado de un nodo: nmero de hijos de dicho nodo Grado de un rbol: mximo de los grados de sus nodos
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.5

Tipos de rboles: rboles ordenados


los nodos estn ordenados de izquierda a derecha; dado un nodo n y el camino de la raz a n, todos los nodos que quedan a la izquierda de dicho camino, estn a la izquierda de n, y todos los nodos que quedan a la derecha, estn a la derecha de n
34

76

31

50

22

90

15

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.6

Tipos de rboles: rboles ordenados


Orden de recorrido

Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k subrboles que cuelgan de n0


n0 A

......... A1 A2 Ak

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.7

Tipos de rboles: rboles ordenados


Orden de recorrido
El recorrido en orden previo de A est formado por la raz n0 , seguida de los nodos de A1 en orden previo, los nodos de A2 en orden previo, y as sucesivamente hasta los nodos de Ak en orden previo. El recorrido en orden simtrico de A est formado por los nodos de A1 en orden simtrico, seguidos de n0 , y de los nodos de A2 , . . . , Ak todos ellos en orden simtrico. El recorrido en orden posterior de A est formado por los nodos de A1 en orden posterior, los nodos de A2 en orden posterior, y as sucesivamente hasta los nodos de A k en orden posterior, para finalizar con n0 .
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.8

Tipos de rboles: rboles ordenados


Orden de recorrido EJEMPLO
34

76

31

50

22

90

15

Orden previo: 34, 4, 50, 22, 76, 31, 90, 2, 15 Orden simtrico: 50, 4, 22, 34, 76, 2, 90, 31, 15 Orden posterior: 50, 22, 4, 76, 2, 90, 15, 31, 34
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.9

Tipos de rboles: rboles etiquetados


Arboles etiquetados Cada nodo ocupa una posicin distinta dentro del rbol, y por ello es necesario asignarle un identif icador Pero cada nodo almacena tambin informacin adicional, a la cual nos referiremos como valor o etiqueta Es muy comn referirse a los nodos directamente por la informacin que contienen. As, los recorridos dan lugar a secuencias de valores.

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetados


Arboles de expresiones
1

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetados


Arboles de expresiones
1

Orden previo expresin prefija: +*a-bc*de

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetados


Arboles de expresiones
1

Orden posterior expresin postfija: abc-*de*+

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetados


Arboles de expresiones
1

Orden simtrico expresin infija: a*b-c+d*e

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetados


Arboles de expresiones
1

Orden simtrico expresin infija: a*b-c+d*e Y los parntesis? Ejercicio


Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles n-arios

Arbol n-ario: rbol de grado n 1 Se define recursivamente: 1. Un rbol formado por un nico nodo es un rbol n-ario 2. Un rbol n-ario se puede construir enraizando k n rboles n-arios a un nico nodo r El nmero mximo de nodos en el nivel i-simo de un rbol n-ario es ni Un rbol unario es un tipo degenerado de rbol n-ario, equivalente a una lista

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en profundidad

Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k sub-rboles descendientes de n0 , ordenados de izquierda a derecha
n0 A

......... A1 A2 Ak

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en profundidad

Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k sub-rboles descendientes de n0 , ordenados de izquierda a derecha El recorrido en profundidad de A se define recursivamente como sigue:
rp(A) = (n0 , rp(A1 ), rp(A2 ), . . . , rp(Ak ))

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en profundidad

Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k sub-rboles descendientes de n0 , ordenados de izquierda a derecha El recorrido en profundidad de A se define recursivamente como sigue:
rp(A) = (n0 , rp(A1 ), rp(A2 ), . . . , rp(Ak ))

El recorrido en profundidad es un recorrido de A en orden previo.

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en anchura

Sea L(i) la lista de nodos, ordenados de izquierda a derecha, en el nivel i del rbol A, con i [1, h], siendo h la altura de A
34 L(0)={34}

76

31

L(1)={4, 76, 31}

50

22

90

15

L(2)={50, 22, 90, 15}

L(3)={2}

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en anchura

Sea L(i) la lista de nodos, ordenados de izquierda a derecha, en el nivel i del rbol A, con i [1, h], siendo h la altura de A El recorrido en anchura de A se define como sigue:
ra(A) = (L(0), L(1), . . . , L(h))

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en anchura

Sea L(i) la lista de nodos, ordenados de izquierda a derecha, en el nivel i del rbol A, con i [1, h], siendo h la altura de A El recorrido en anchura de A se define como sigue:
ra(A) = (L(0), L(1), . . . , L(h))

El recorrido en anchura enumera los nodos que hay en cada nivel, de izquierda a derecha, desde el nivel 0 hasta el nivel ms profundo del rbol.

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
Tipos ELEMENTO NODO ARBOL Constantes NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
procedimiento inicializar (ref t: ARBOL) Inicializa la variable t de tipo ARBOL Realiza las reservas dinmicas de memoria necesarias Como resultado, se tendr un rbol t vaco inicializar (t): primera accin a realizar sobre t

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
funcin aadir_hijo (ref t: ARBOL, ref n: NODO, x: ELEMENTO): NODO Crea un nuevo nodo con la informacin x, y lo inserta como siguiente hijo del nodo n en el rbol t Precondicin: n = NODO_NULO si y slo si t es un rbol vaco Si n = NODO_NULO entonces el nuevo nodo es raz de t Devuelve el nodo recin creado

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
aadir_hijo(A,c,12)
a 5
a 5

A
b 7 c 1
b 7 c

A
1

12

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
procedimiento eliminar_subrbol (ref t: ARBOL, n: NODO) Elimina el subrbol que cuelga del nodo n del rbol t Si n = NODO_NULO, el procedimiento no hace nada Si n es la raz de t, el procedimiento elimina el rbol completo, y t queda vaco

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
eliminar_subrbol(A,c)
a 5

A
a 5

1
b 7

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
funcin vaco?(t: ARBOL): booleano Devuelve: TRUE FALSE si el rbol t est vaco en caso contrario

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
funcin raz(t: ARBOL): NODO Devuelve el nodo raz del rbol t Si t est vaco, devuelve NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
funcin padre(t: ARBOL, n: NODO): NODO Devuelve el nodo padre de n en el rbol t Si n no tiene padre es decir, si se trata de la raz del rbol t, la funcin devuelve NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
funcin primer_hijo(t: ARBOL, n: NODO): NODO Devuelve el primer hijo del nodo n en el rbol t Si n no tiene hijos, la funcin devuelve NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
funcin siguiente_hermano(t: ARBOL, n: NODO): NODO Devuelve el siguiente hermano a la derecha del nodo n en el rbol t Si n es el ltimo de los hermanos, la funcin devuelve NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol
funcin valor (t: ARBOL, n: NODO): ELEMENTO Devuelve el valor almacenado en el nodo n del rbol t Precondicin: n = NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol

A
b 7 c 1 f 8

raz(A)

a a d

padre(A,c)

primer_hijo(A,c)

siguiente_hermano(A,c)
d 3 e 12

valor(A,c)

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Ejemplo: recorrido en orden previo


procedimiento orden_previo(t: ARBOL, n: NODO) var c: NODO fvar usa funcin imprimir(n: NODO) fusa principio imprimir (n) c primer_hijo(t,n) mientras c = NODO_NULO hacer orden_previo(t,c) c siguiente_hermano(t,c) fin_mientras n Llamada original: orden_previo(t,raz(t))
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol: representacin en memoria (1)


Array esttico
1 5

A
2 7 3 1 4 8

12

Indice de nodo Nodo padre Valor Nivel


Algoritmos y Estructuras de Datos

1 0 5 0

2 1 7

3 1 1 1

4 1 8

5 3 3 2

6 3 12

7 ........ ........

MAX

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol: representacin en memoria (2)


Listas de hijos
A
6 Numero de nodos Valores Listas de hijos 2
NULO

A
2 7 3 1 4 8
Indices de nodo

1 2 3 4 5

5 7 1 8 3 12
NULO

NULO

NULO

NULO

12

NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol: representacin en memoria (3)


Representacin explcita
Valor / Nodo padre / Primer hijo / Siguiente hermano
A
5

A
3 12

Valor

Nodo padre Siguiente hermano

12

Primer hijo

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol: representacin explcita


constantes NODO_NULO = NULO fin_constantes tipos ITEM = registro valor: ELEMENTO padre: apuntador a ITEM primer_hijo: apuntador a ITEM siguiente_hermano: apuntador a ITEM fin_registro NODO = apuntador a ITEM ARBOL = NODO fin_tipos

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


procedimiento inicializar (ref t: ARBOL) principio t NODO_NULO n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


funcin aadir_hijo (ref t: ARBOL, ref n: NODO, x: ELEMENTO): NODO var p, q: NODO n_var principio p reservar (1,ITEM) apuntado(p).valor x apuntado(p).primer_hijo NODO_NULO apuntado(p).siguiente_hermano NODO_NULO si t = NODO_NULO entonces apuntado(p).padre NODO_NULO tp devolver p n_si continua...

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


...viene de la anterior apuntado(p).padre n si apuntado(n).primer_hijo = NODO_NULO entonces apuntado(n).primer_hijo p si_no q apuntado(n).primer_hijo mientras apuntado(q).siguiente_hermano = NODO_NULO hacer q apuntado(q).siguiente_hermano n_mientras apuntado(q).siguiente_hermano p n_si devolver p n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


procedimiento eliminar_subrbol(ref t: ARBOL, n: NODO) var p, q, r: NODO n_var usa liberar_subrbol() n_usa principio si n = t entonces liberar_subrbol(t) t NODO_NULO si_no p apuntado(n).padre q apuntado(p).primer_hijo r NODO_NULO continua...

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


...viene de la anterior mientras q = n hacer rq q apuntado(q).siguiente_hermano n_mientras si r = NODO_NULO entonces apuntado(r).siguiente_hermano apuntado(n).siguiente_hermano si_no apuntado(p).primer_hijo apuntado(n).siguiente_hermano n_si liberar_subrbol(n) n_si n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


funcin vaco?(t: ARBOL): booleano principio si t = NODO_NULO entonces devolver TRUE si_no devolver FALSE n_si n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


funcin raz(t: ARBOL): NODO principio devolver t n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


funcin padre(t: ARBOL, n: NODO): NODO principio devolver apuntado(n).padre n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


funcin primer_hijo(t: ARBOL, n: NODO): NODO principio devolver apuntado(n).primer_hijo n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita


funcin siguiente_hermano(t: ARBOL, n: NODO): NODO principio devolver apuntado(n).siguiente_hermano n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

TAD Arbol: representacin explcita


funcin valor (t: ARBOL, n: NODO): ELEMENTO principio devolver apuntado(n).valor n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

TAD Arbol: ejercicios


Escribir en lenguaje algortmico una funcin que calcule la altura de un rbol, utilizando los procedimientos y funciones del TAD Arbol. Escribir en lenguaje algortmico una funcin que calcule el grado de un rbol, utilizando los procedimientos y funciones del TAD Arbol. Escribir en lenguaje algortmico sendos procedimientos que obtengan los recorridos en orden simtrico y posterior de un rbol. Escribir en lenguaje algortmico un procedimiento que obtenga el recorrido en anchura de un rbol. Sugerencia: utilcese una variable de tipo COLA, as como los procedimientos y funciones del TAD COLA.
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

TAD Arbol: ejercicios


Escribir en lenguaje algortmico una implementacin del TAD Arbol Binario mediante una representacin explcita basada en apuntadores, con las siguientes operaciones: inicializar(), crear_raz(), aadir_hijo_izq(), aadir_hijo_der(), extraer_subrbol(), eliminar_subrbol(), raz(), padre(), hijo_izq(), hijo_der(), valor() y vaco?(). Escribir en lenguaje C el cdigo necesario para codificar/decodificar ficheros de texto mediante lo que se conoce como cdigos de Huffman. El fichero codificado deber contener: la especificacin del rbol binario de cdigos, el nmero de caracteres del fichero original y una secuencia de bytes con la codificacin propiamente dicha. Sugerencia: consultar "Estructuras de Datos y Algoritmos", de Aho-Hopcroft-Ullman (p. 95-102).
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

Procedimiento auxiliar liberar_subrbol()


liberar_subrbol() es un procedimiento auxiliar y privado. No forma parte de la especificacin del TAD Arbol. Slo se puede llamar desde los interfaces pblicos. procedimiento liberar_subrbol(n: NODO) var p, q: NODO n_var principio p apuntado(n).primer_hijo mientras p = NODO_NULO hacer q apuntado(p).siguiente_hermano liberar_subrbol(p) pq n_mientras liberar (n) Volver n
Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

Das könnte Ihnen auch gefallen