arboles
TRANSCRIPT
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
4
76
31
50
22
90
15
2Algoritmos 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 bsicosCamino: 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 nodosAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.5
Tipos de rboles: rboles ordenadoslos 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 n34
4
76
31
50
22
90
15
2
Algoritmos y Estructuras de Datos
Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.6
Tipos de rboles: rboles ordenadosOrden de recorrido
Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k subrboles que cuelgan de n0n0 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 ordenadosOrden de recorridoEl 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 ordenadosOrden de recorrido EJEMPLO34
4
76
31
50
22
90
15
2
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, 34Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.9
Tipos de rboles: rboles etiquetadosArboles 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 etiquetadosArboles de expresiones1
+
2
*
3
*
4
a
5
6
d
7
e
8
b
9
c
Algoritmos y Estructuras de Datos
Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.1
Tipos de rboles: rboles etiquetadosArboles de expresiones1
+
2
*
3
*
4
a
5
6
d
7
e
8
b
9
c
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 etiquetadosArboles de expresiones1
+
2
*
3
*
4
a
5
6
d
7
e
8
b
9
c
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 etiquetadosArboles de expresiones1
+
2
*
3
*
4
a
5
6
d
7
e
8
b
9
c
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 etiquetadosArboles de expresiones1
+
2
*
3
*
4
a
5
6
d
7
e
8
b
9
c
Orden simtrico expresin infija: a*b-c+d*e Y los parntesis? EjercicioAlgoritmos 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 derechan0 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 A34 L(0)={34}
4
76
31
L(1)={4, 76, 31}
50
22
90
15
L(2)={50, 22, 90, 15}
2
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 ArbolTipos ELEMENTO NODO ARBOL Constantes NODO_NULO
Algoritmos y Estructuras de Datos
Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.1
TAD Arbolprocedimiento 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 Arbolfuncin 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 Arbolaadir_hijo(A,c,12)a 5a 5
e
Ab 7 c 1b 7 c
A1
d
3
d
3
e
12
Algoritmos y Estructuras de Datos
Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.1
TAD Arbolprocedimiento 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 Arboleliminar_subrbol(A,c)a 5
Aa 5
b
7
c
1b 7
A
d
3
Algoritmos y Estructuras de Datos
Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.1
TAD Arbolfuncin 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 Arbolfuncin 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 Arbolfuncin 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 Arbolfuncin 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 Arbolfuncin 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 Arbolfuncin 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
5
Ab 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
f
valor(A,c)
1
Algoritmos y Estructuras de Datos
Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.1
Ejemplo: recorrido en orden previoprocedimiento 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 esttico1 5
A2 7 3 1 4 8
5
3
6
12
Indice de nodo Nodo padre Valor NivelAlgoritmos 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 hijosA6 Numero de nodos Valores Listas de hijos 2NULO
1
5
A2 7 3 1 4 8Indices de nodo
1 2 3 4 5
5 7 1 8 3 12NULO
3
4
NULO
5
6
NULO
NULO
5
3
6
12
6
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 explcitaValor / Nodo padre / Primer hijo / Siguiente hermanoA5
1
5
7
1
8
A3 12
2
7
3
1
4
8
Valor
Nodo padre Siguiente hermano
5
3
6
12
Primer hijo
Algoritmos y Estructuras de Datos
Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.1
TAD Arbol: representacin explcitaconstantes 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 explcitaprocedimiento 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 explcitafuncin 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 nAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.2
TAD Arbol: representacin explcitaprocedimiento 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 nAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.2
TAD Arbol: representacin explcitafuncin 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 explcitafuncin 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 explcitafuncin 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 explcitafuncin 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 explcitafuncin 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 explcitafuncin 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: ejerciciosEscribir 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: ejerciciosEscribir 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 nAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)
TAD Arbol p.3