Está en la página 1de 155

RBOLES GENERALES (N-ARIOS)

Un rbol es un tipo especial de relacin que es muy til para el estudio de una gran variedad de aplicaciones en las ciencias de la computacin e ingeniera. Un rbol se representa como un grafo dirigido o no dirigido. Los rboles son muy usados en el estudio y construccin de base de datos, modelamiento jerrquico de clases y en la teora de lenguajes y construccin de compiladores, son muy usados para describir los rboles sintcticos correspondientes a gramticas de lenguajes.

RBOLES GENERALES (N-ARIOS)


Definicin Un rbol A se define como un conjunto de elementos llamados nodos o vrtices, de forma que: - A es vaco, en cuyo caso se llama rbol vaco o rbol nulo, o - A contiene un nodo distinguido v0 llamado raz de A y los nodos restantes de A forman un conjunto de rboles A1, A2 , A3, ..., An Cada rbol Ai tiene como raz al nodo vi Un rbol se representa mediante un grafo en donde la raz v0 es el nodo en A en la parte superior. Una lnea hacia abajo de izquierda a derecha, un arco seala a los hijos de v0

RBOLES GENERALES (N-ARIOS)


v0

v1 A1

v2 A2

v3 A3

vn An

- A1, A2 , A3, ..., An son llamados subrboles de v0 - Si Ai no es vaco, entonces su raz vi, es llamado hijo de v0, y v0 es llamado padre de vi

RBOLES GENERALES (N-ARIOS)


RBOLES LIBRES Y RBOLES CON RAIZ Un rbol libre es un tipo especial de grafo no dirigido, cualquiera de sus nodos puede ser considerado una raz. Un rbol con raz es un tipo especial de grafo dirigido. Es un rbol con nica raz. Ejemplos de rboles libres:

RBOLES GENERALES (N-ARIOS)


Ejemplos de rboles con raz:

RBOLES GENERALES (N-ARIOS)


Definicin Sea V: conjunto de vrtices o nodos A: relacin: aristas o caminos entre los elementos de V (A, v0) es un rbol si y solo si: 1. Existe un nico vrtice v0 V tal que v0 no tiene ninguna entrada. v0 es llamado raz del rbol A. 2. v V tal que v v0, v tiene solo una entrada.

RBOLES GENERALES (N-ARIOS)


Si (A, v0) es un rbol 1. A es una relacin irreflexiva (no existen ciclos). 2. A es asimtrica, si u es padre de v, v no puede ser padre de u. 3. Si a R b y b R c entonces a R c a,b,c V R no es transitiva. Es decir si a es padre de b, y b es padre de c, no es cierto que a es padre de c.

RBOLES GENERALES (N-ARIOS)


Definicin recursiva de rbol Un rbol A es un conjunto de nodos V, donde Si V = vaco A es el rbol nulo Si V vaco Existe v0 V llamado raz de A y existen A1, A2 ,..., An, con races v1, v2 ,..., vn respectivamente tal que existe una arista (v0, vi) i Cada Ai es un subrbol del rbol A 1. Un vrtice es por si mismo un rbol, este nodo es la raz de dicho rbol. 2. La raz del rbol Ai es vi vi es llamado hijo de v0

RBOLES GENERALES

v0

A1 v1 v2

A2 vn

An

RBOLES GENERALES (N-ARIOS)


Niveles jerrquicos de un rbol Cada nodo de un rbol A tiene asignado un nmero de nivel. La raz de A tiene asignado el nivel 0. Los dems nodos de A tienen asignado un nmero de nivel que es mayor en 1 al nmero de nivel de su padre. Los nodos del mismo nivel se dicen hermanos. Terminologa Fundamental Sea n1, n2 ,..., nk secuencia de vrtices o nodos tal que ni es el padre de ni+1, para todo i de 1 a k - Denominamos raz al nico nodo que no tiene padre, que corresponde al nodo de nivel 0. - Denominamos hoja (o terminal) a los nodos que no tienen hijos.

RBOLES GENERALES (N-ARIOS)


- La secuencia de nodos (n1, n2 ,..., nk) se denomina camino del nodo n1, al nodo nk - La longitud de camino es el nmero de nodos de la secuencia menos uno. La longitud de camino est determinado por el nmero de aristas del camino, no por el nmero de nodos del camino. As el camino (a,b,c) es de longitud 2, el camino (a, b) es de longitud 1, el camino (a) es de longitud 0. - El camino de un nodo hacia si mismo es de longitud 0. - Si existe un camino del nodo a hacia el nodo b, se dice que a es antecesor de b y b es sucesor o descendiente de a.

RBOLES GENERALES (N-ARIOS)


- Un antecesor o un descendiente de un nodo que no sea el mismo, recibe el nombre de antecesor propio o descendiente propio respectivamente. La raz de un rbol es el nico nodo que no tiene antecesores propios. Un nodo sin descendientes propios se denomina hoja. - La altura o profundidad de un rbol, es la longitud de camino ms largo de ese nodo a una hoja. La altura del rbol es la altura de la raz a ese nodo.

RBOLES GENERALES (N-ARIOS)


Otros trminos - El momento o tamao de un rbol, es el nmero de nodos que contiene el rbol. - El peso es el nmero de hojas del rbol. - Llamamos grado de un nodo al nmero de hijos del nodo. Podemos decir entonces que las hojas son los nodos de grado 0. Todos los nodos tiene hijos a excepcin de las hojas. Todos los nodos tienen padre a excepcin de la raz.

RBOLES GENERALES (N-ARIOS)


Ejemplo: Considere el rbol A siguiente: Nivel 0 Nivel 1 2 1 3 4

Nivel 2 5

10

11

Nivel 3 Nivel 4

12 17

13 18

14

15 19

16

RBOLES GENERALES (N-ARIOS)


Raz: 1 Momento: 19 Peso: 10 Altura: 4 Grado(3): 2 Grado(4): 3 Descendientes de 8: Descendientes propios de 8: Antecesores de 8: Antecesores propios de 8:

8, 13, 14, 17 y 18 13, 14, 17 y 18 1, 3 y 8 1y3

RBOLES GENERALES (N-ARIOS)


Ejemplo: Sea el rbol de vrtices V y altura h Definimos h(u) la altura del subrbol con raz u Si V = h = -1 V = {a} h=0 a V = {a, b} h=1 a V= {a, b, c, d, e} h=2 h(a) = h = 2

h(a) = h = 1 a

b h(b) = 0

b d e

c h(b) = h(c) =1 h(d) = h(e) = 0

RBOLES GENERALES (N-ARIOS)


TEOREMA Sea A un grafo con n vrtices Las siguientes afirmaciones son equivalentes 1. A es un rbol 2. A es conexa y acclica 3. A es conexa y tiene n-1 aristas 4. A es acclica y tiene n-1 aristas TEOREMA Si a, b son vrtices distintos de un rbol A, entonces existe un nico camino que conecta estos vrtices. Se puede demostrar que como A es conexo, existe al menos un camino de a hacia b. Si hubiera ms caminos de este tipo, por medio de dos de ellos, algunas aristas podran tener ciclos, pero sabemos que un rbol no tiene ciclos.

RBOLES GENERALES (N-ARIOS)


PRIMITIVAS DE ACCESO a) HIJO_MAS_IZQ(n): devuelve el nodo hijo ms a la izquierda del nodo n en el rbol. Devuelve Nulo si n es una hoja y, por tanto no tiene hijos. b) HERMANO_DER(n): devuelve el hermano a la derecha, el cual se define como el nodo m que tiene el mismo padre p que n, de forma que m esta inmediatamente a la derecha de n en el ordenamiento de los hijos de p. c) VALOR(n): devuelve el campo valor del nodo n en el rbol. d) RAIZ: devuelve el nodo raz del rbol o Nulo si el rbol es nulo. e) INIT_ARBOL: Permite inicializar el rbol como rbol nulo.

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


Representacin mediante arreglos Cuando se tiene los nodos etiquetados con enteros, es posible usar una representacin mediante un arreglo unidimensional A, en donde el ndice i representa el valor del nodo i, y A(i) representa el valor del padre de i.
1 2 4 5 9 3 10 A(I) contiene el padre del nodo i

A(4) = 2 es el padre del nodo 4

6 0 1 1 2 1 3

7 2 4

8 2 5 5 6 5 7 5 8 3 9 3 10

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES Representacin mediante lista de hijos Cuando los nodos estn etiquetados con mayor informacin, es conveniente utilizar una estructura de listas, en donde cada nodo es una estructura de la forma Registro Nodo Inicio T Valor Nodo *sig FinRegistro Este modelo presenta la restriccin que el nmero de nodos est limitado al tamao del vector.

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


Representacin mediante lista de hijos RAZ es un arreglo de tamao n (tamao de V) RAZ(i) es la cabeza de la lista que contiene los hijos del nodo i.
RAZ 1 2 3 4 5 6 7 8 9 10 * * * * * 6 7 8 4 2 5 9 *

Lista de hijos 2 4 9 6 3 5 10 7
1 3 10

* * * 8 *

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


Accin Recorrido(N) Inicio Para I desde 1 hasta N p = Raz(I) Mientras p Nulo Escribir p Valor p p sig FinMientras FinPara Fin

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


Raz(i) es la cabeza de la lista de los hijos del nodo i i 1 2 3 4 5 6 7 8 9 10 Raz(i) Raz(1) Raz(2) Raz(3) Raz(4) = Nulo Raz(5) Raz(6) = Nulo Raz(7) = Nulo Raz(8) = Nulo Raz(9) = Nulo Raz(10) = Nulo Hijos del nodo i 2, 3 4, 5 9, 10 No tiene 6, 7, 8 No tiene No tiene No tiene No tiene No tiene

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


La accin recorre todo el vector RAZ, aunque alguna raz sea nula, por tanto no tiene hijos. Este recorrido resulta innecesario, y se puede solucionar haciendo que el vector Raz sea una lista enlazada que contenga un nodo por cada nodo del rbol que no es hoja RAZ Lista de hijos

1 2 3 5

2 4 9 6

3 5 10 7

* * * 8 *

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


Puntero al hijo de ms a la izquierdahermano derecho (HI-HD) Los nodos tienen dos apuntadores uno al hijo de ms a la izquierda y el otro al hermano derecho.

Puntero al hermano derecho Puntero al hijo ms a la izquierda Valor del nodo

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


Ejemplo: El rbol de la figura (a) puede representarse mediante el modelo HI-HD mostrado en la figura (b)

(a)

(b)

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


Representacin mediante cursores hijo ms a la izquierdahermano derecho La variable CABEZA apunta a la direccin de la raz del rbol (VALOR(i)). HIJO(i) apunta a la posicin (NODO(HIJO(i)) donde se encuentra la direccin del hijo de ms a la izquierda. SIG(i) apunta a la posicin (NODO(i)) donde se encuentra la direccin del hermano derecho.

A
B C

REPRESENTACIN EN MEMORIA DE RBOLES GENERALES


Representacin mediante cursores hijo ms a la izquierda-hermano derecho

VALOR
1 2 F

HIJO
* 1 2

NODO

SIG

CABEZA 5

3 4 5 6 7 8 9

B E A G D C

2 * 6 * * 9

3 4 5 6 7 8 9 4 3 8 1 6 8 7 * * *

Mediante hijo ms a la izquierda-hermano derecho RAIZ variable global apunta a la raz del rbol VALOR(i) contiene el valor del nodo con direccin i HI(i) contiene la direccin del hijo ms a la izquierda del nodo i HD(i) contiene la direccin del hermano derecho del nodo i HI
1 2 0

VALOR
F

HD
0

RAIZ 5

3 4 5 6 7 8 9

7 0 3 0 0 6

B E A G D C

8 1 0 0 4 0

A
B C

RECORRIDO DE RBOLES GENERALES


Considrese el rbol con Raz y los subrboles A1, A2 , A3, ..., An ORDEN PREVIO Raz Los nodos de A1 en orden previo Los nodos de A2 en orden previo ............................ Los nodos de An en orden previo ORDEN SIMTRICO Los nodos de A1 en orden simtrico Raz Los nodos de A2 en orden simtrico Los nodos de A3 en orden simtrico ................................ Los nodos de An en orden simtrico

RECORRIDO DE RBOLES GENERALES


ORDEN POSTERIOR Los nodos de A1 en orden posterior Los nodos de A2 en orden posterior ............................ Los nodos de An en orden posterior Raz ALGORITMOS RECURSIVOS PARA EL RECORRIDO DE UN ARBOL GENERAL Los algoritmos son abstractos, depender de la estructura de datos en la que se implementen Accin ORDEN_PREVIO(n) Inicio Listar n Para cada hijo h de n de izquierda a derecha ORDEN_PREVIO(h) FinPara

RECORRIDO DE RBOLES GENERALES


Accin ORDEN_SIMTRICO(n) Inicio Si n es hoja Listar n Sino h HIJO_MAS_IZQ(n) ORDEN_SIMTRICO(h) Listar n Para cada hijo h de n excepto el de ms a la izquierda ORDEN_SIMTRICO(h) FinPara FinSi Fin

RECORRIDO DE RBOLES GENERALES


Accin ORDEN_POSTERIOR(n) Inicio Para cada hijo h de n ORDEN_POSTERIOR(h) FinPara Listar n Fin

RECORRIDO DE RBOLES GENERALES A B C D

Orden previo: A, B, E, J, K, L, F, C, G, M, D, H, I, N, O Orden simtrico: J, E, K, L, B, F, A, M, G, C, H, D, N, I, O Orden posterior: J, K, L, E, F, B, M, G, C, H, N, O, I, D, A

RBOL MULTILENLACE
rbol de enlace triple Los nodos tienen tres apuntadores, uno hacia el hijo de ms a la izquierda, el segundo apunta al nodo padre, y el tercero apunta al hermano derecho. Esta representacin presenta una ventaja para volver al nivel superior.

RBOL MULTILENLACE
rbol con enlace en anillo Resulta conveniente utilizar listas circulares que cierren cadenas de rboles multienlace. Cada nodo tiene un puntero al hijo de ms a la izquierda, uno al hermano derecho y otro al padre: En el ltimo de los hijos se reemplaza el puntero nulo por un puntero al primero de los hermanos, conformando una lista circular de hermanos, facilitando el acceso a cualquiera de ellos.

RBOLES SIMILARES
RBOLES SIMILARES Sean A1 y A2 dos rboles A1 y A2 se llaman rboles similares si tienen la misma estructura (misma forma). A1 y A2 se llaman rboles copias, si son similares y tienen los mismos contenidos en sus respectivos nodos.
A E A E

C (a)

G (b)

C (c)

G (d)

Los rboles de las figuras (a), (c) y (d) son similares. Los rboles de las figuras (a) y (c) son rboles copias. El rbol (b) no es similar ni copia de (d)

RBOLES BALANCEADOS
rbol balanceado Todos los nodos que no son hojas tienen el mismo nmero de ramas. Un rbol balanceado se construye desde la raz, descendiendo hacia los niveles inferiores. Cada nivel se completa de izquierda a derecha, de modo que todos los niveles excepto el ltimo deben estar completos. Ejemplo: Los siguientes son rboles balanceados

Los siguientes son rboles desbalanceados.

RBOL BINARIO AB
Un rbol binario es un tipo especial de rbol en el que todo nodo del rbol tiene a lo ms dos hijos. Son muy utilizados para realizar bsquedas y ordenamientos. Tambin son utilizados para representar expresiones aritmticas. Definicin Un rbol binario AB se define como un conjunto de elementos llamados nodos o vrtices, de forma que: - A es vaco, en cuyo caso se llama rbol vaco o rbol nulo, o - A contiene un nodo distinguido v0 llamado raz de A y los nodos restantes de A forman un par de conjuntos ordenados de rboles A1 y A2 A1 es llamado subrbol izquierdo y A2 es llamado subrbol derecho.

RBOL BINARIO AB v0
A1 A2

Definicin Se define un rbol binario como - Un rbol vaco - Cada nodo no tiene hijos, o - tiene un hijo izquierdo - tiene un hijo derecho - tiene un hijo izquierdo y un hijo derecho

RBOL BINARIO AB
Grficamente podemos definir un conjunto como
A A C D F B B E G D F E G C

RBOL BINARIO
Caractersticas de rboles binarios 1. El nmero mximo de nodos en un rbol binario h es 2h+1-1 2. Un rbol con n nodos internos tiene n+1 nodos externos (hojas). 3. La altura de un rbol binario lleno con n nodos internos es aproximadamente log2 n.

RBOL BINARIO
Modelo 1: Mediante apuntadores a los hijos Cada nodo consiste de un registro: Registro Nodo Inicio T Valor Nodo *HI // apuntador al hijo izquierdo Nodo *HD // apuntador al hijo derecho FinRegistro A B D E C B A C

RBOL BINARIO
Modelo 2: Mediante arreglos paralelos (cursores) Raz: apunta al ndice de la entrada que contiene el valor de la raz del rbol. Disp: apunta al ndice de la primera entrada disponible en el vector.
VALOR Raz E B HI 0 7 HD 0 1

A B C

Disp

C D

0 0

0 0

RBOLES ESTRICTAMENTE BINARIOS


Definicin Sea (A, v0) rbol binario con raz v0 A es un rbol estrictamente binario, si cumple v V Si v no es hoja entonces v tiene subrboles izquierdo y derecho no vacos. Un rbol estrictamente binario con n hojas tiene 2n-1 nodos.

(a) (b) El rbol de la Figura (a) no es estrictamente binario, mientras que el rbol de la Figura (b) si lo es.

RBOLES COMPLETOS Y RBOLES CUASI COMPLETOS


Definicin Sea (A, v0) rbol binario con raz v0 A es un rbol completo, si cumple Si A es de altura h entonces, v V Si v es hoja entonces v est en el nivel h. Es decir todas las hojas deben estar en el nivel h..

(a)

(b)

El rbol de la figura (a) no es completo, mientras que el rbol de la figura (b) si lo es.

RBOLES COMPLETOS Y RBOLES CUASI COMPLETOS


Definicin Sea (A, v0) rbol binario con raz v0 y profundidad h A es un rbol cuasi completo, si cumple 1. v V Si v es hoja entonces v est en el nivel h o nivel h-1. 2. v V Si v tiene un descendiente derecho en el nivel h, entonces todos los descendientes izquierdos de v que sean hojas tambin deben estar en el nivel h

b d f g e
(a)

c d h i

b e j f

c g k

(b) El rbol de la figura (a) no es cuasi completo pues las hojas estn el nivel 1, 2 y 3, por lo que no cumple la condicin 1. El rbol de la figura (b) no es cuasi completo pues aunque cumple la condicin 1, las hojas estn en el nivel 2 y 3. Pero no cumple la condicin 2, ya que el nodo a tiene descendiente derecho j en el nivel 3, y un descendiente izquierdo e en el nivel 2.

RBOLES COMPLETOS Y RBOLES CUASI COMPLETOS a b d h i


(c)

a c b g h d i j
(d)

c e f g

El rbol de la figura (c) es estrictamente binario y cumple ambas condiciones, por tanto es cuasi completo. El rbol de la figura (d) aunque no es estrictamente binario, cumple ambas condiciones, por tanto es cuasi completo.

RBOLES COMPLETOS Y RBOLES CUASI COMPLETOS


Un rbol binario tiene en el nivel k a lo ms 2k nodos. Si el rbol A es completo, A es estrictamente binario, por tanto el nivel k tendr exactamente 2k nodos. As el nivel 0 tendr 20 = 1 nodos el nivel 1 tendr 21 = 2 nodos el nivel 2 tendr 22 = 4 nodos de esto se deduce que un rbol completo de profundidad h tiene 20 + 21 + ..... 2h nodos, esto equivale a
h

2i = 2h+1 - 1
i=0

El rbol binario tiene 2h nodos hojas y 2h -1 nodos no hojas.

REPRESENTACIN DE UN RBOL COMPLETO O CUASI COMPLETO


Un rbol binario es cuasi completo, si y slo si todos sus niveles excepto posiblemente el ltimo, tienen el mximo nmero de nodos posible y los nodos del ltimo nivel estn lo ms a la izquierda posible. REPRESENTACIN DE UN RBOL COMPLETO O CUASI COMPLETO Si enumeramos los nodos de un rbol binario completo o cuasi completo con enteros 1, 2, 3, ... De izquierda a derecha y por niveles de arriba hacia abajo, se puede implementar en un arreglo en donde el ndice representa la etiqueta del nodo. Con este etiquetado se puede determinar fcilmente quienes son los hijos o el padre de cada nodo k.

REPRESENTACIN DE UN RBOL COMPLETO O CUASI COMPLETO


A B D H Advirtase que el nodo con ndice k, Tiene como hijo izquierdo al nodo con ndice 2*k Tiene como hijo derecho al nodo con ndice 2*k+1 Tiene como padre al nodo con ndice k/2 E F C G A 1 B 2 C 3 D 4 E 5 F 6 G 7 H 8

REPRESENTACIN DE UN RBOL BINARIO COMPLETO O CUASI COMPLETO


Representacin secuencial Supongamos que A es un rbol binario completo o cuasicompleto. El rbol A puede mantenerse en forma eficiente en un arreglo ARBOL, en donde: - La raz de A se guarda en ARBOL[1] - Si un nodo N esta en la posicin ARBOL[k], entonces Su hijo izquierdo se encuentra en la posicin ARBOL[2*k] Su hijo derecho se encuentra en la posicin ARBOL[2*k+1] - Si ARBOL[1] = Nulo el rbol esta vaco

REPRESENTACIN DE UN RBOL BINARIO COMPLETO O CUASI COMPLETO


Ejemplo:
15 10 12 (a) 29 45 15 1 10 2 29 3 0 4 12 5 0 6 45 7 8

El rbol de la figura (a) no es completo. Se necesitan siete espacios para almacenar el rbol, aunque tenga cinco nodos. Si colocramos nulo para cada hijo izquierdo e hijo derecho de los nodos hojas, el nodo 7, por ejemplo tendra a sus hijos izquierdo y derecho en las posiciones catorce y quince respectivamente. Necesitaramos quince nodos, lo que hace que resulte ineficiente esta representacin para rboles que no son completos.

REPRESENTACIN DE UN RBOL BINARIO COMPLETO O CUASI COMPLETO


Ejemplo:
15 10 8 12 17 (b) 29 15 1 10 2 29 3 8 4 12 5 17 6 7 8

El rbol de la figura (b) es cuasi completo, necesita seis espacios, igual al nmero de nodos.

RECORRIDO DE RBOLES BINARIOS


Considrese el rbol binario con RAZ y los subrboles SAI y SAD subrbol izquierdo y subrbol derecho respectivamente. PRE-ORDEN Raz RAZ Subrbol izquierdo en pre-orden Subrbol derecho en pre-orden IN-ORDEN Subrbol izquierdo en in-orden Raz SAI SAD Subrbol derecho en in-orden POST-ORDEN Subrbol izquierdo en post-orden Subrbol derecho en post-orden Raz

RECORRIDO DE RBOLES BINARIOS Accin PRE-ORDEN(n)


Inicio Listar n PRE-ORDEN(HI(n)) PRE-ORDEN(HD(n) Fin

Accin POST-ORDEN(n)
Inicio POST-ORDEN(HI(n)) POST-ORDEN(HD(n)) Listar n Fin

Accin IN-ORDEN(n)
Inicio IN-ORDEN(HI(n)) Listar n IN-ORDEN(HD(n)) Fin

RECORRIDO DE RBOLES BINARIOS A B D G E H C F

PRE ORDEN: A, B, D, C, E, G, H, F IN ORDEN: D, B, A, G, E, H, C, F POST ORDEN: D, B, G, H, E, F, C, A

RECORRIDO DE RBOLES BINARIOS EN FORMA NO RECURSIVA


RECORRIDO INORDEN Entrada: Raz (raz del rbol) Salida: recorrido inorden Precondicin: El rbol existe y es binario Raz apunta a la raz del rbol La pila P debe estar vaca Se recorre el rbol, avanzando hasta su hijo de ms a la izquierda y en el camino se va empilando los nodos padres. Cuando se encuentra la hoja ms izquierda, se depila el padre, se lista su valor y se avanza por la rama derecha. En el subrbol derecho se aplica el mismo proceso.

RECORRIDO DE RBOLES BINARIOS EN FORMA NO RECURSIVA


Accin Recorrido_Inorden (Raz) Inicio R Raz Init(P) Mientras(R Nulo Vacia(P)) Si (R Nulo) Empilar(P, R) R R HI Sino Depilar(P, R) Escribir R Valor R R HD FinSi FinMientras Fin

RECORRIDO DE RBOLES BINARIOS EN FORMA NO RECURSIVA


RECORRIDO PREORDEN Entrada: Raz (raz del rbol) Salida: recorrido preorden Precondicin: El rbol existe y es binario Raz apunta a la raz del rbol La pila P debe estar vaca Se recorre el rbol, avanzando hasta su hijo de ms a la izquierda y en el camino se va listando y empilando los nodos padres. Cuando se encuentra la hoja ms izquierda, se depila el padre y se avanza por la rama derecha. En el subrbol derecho se aplica el mismo proceso.

RECORRIDO DE RBOLES BINARIOS EN FORMA NO RECURSIVA


Accin Recorrido_Preorden (Raz) Inicio R Raz Init(P) Mientras(R Nulo Vacia(P)) Si (R Nulo) Escribir R Valor Empilar(P, R) R R HI Sino Depilar(P, R) R R HD FinSi FinMientras Fin

RECORRIDO DE RBOLES BINARIOS EN FORMA NO RECURSIVA


RECORRIDO POSTORDEN Entrada: Raz (raz del rbol) Salida: recorrido postorden Precondicin: El rbol existe y es binario Raz apunta a la raz del rbol La pila P debe estar vaca, constituido por dos campos: apuntador al nodo y un valor booleano indicando si desciende de un subrbol izquierdo o derecho. Mtodo: Se recorre el rbol, avanzando hasta su hijo de ms a la izquierda y en el camino se va empilando los nodos padres y su valor booleano. Cuando se encuentra la hoja ms izquierda, se depila el padre; si su valor booleano es derecho se lista y se pasa al nodo siguiente sobre la pila; si su valor booleano es izquierdo se avanza por la rama derecha empilando los nodos padres junto con su valor booleano.

RECORRIDO DE RBOLES BINARIOS EN FORMA NO RECURSIVA Accin Recorrido_Postorden (Raz) R Raz Init(P) Mientras(R Nulo Vacia(P)) Si (R Nulo) Empilar(P, (R, IZQ)) R R HI Sino Depilar(P, (R, INDICADOR)) Si (INDICADOR = IZQ) Empilar(P, (R, DER)) R R HD Sino Escribir R Valor R Nulo FinSi FinSi FinMientras

RECORRIDO POR NIVELES DE UN RBOL BINARIO


El recorrido por niveles o por anchura de un rbol binario consiste en visitar primero la raz, luego los nodos del nivel 1, despus los nodos del nivel 2, etc., hasta visitar los nodos del ltimo nivel. Cada nivel se visita de izquierda a derecha.

A B D G E H C F

Recorrido: A, B, C, D, E, F, G, H

RBOL BINARIO EXTENDIDO


Definicin Un rbol binario A se llama rbol-2 o arbol binario extendido, si cumple que: Todo vrtice tiene cero o dos hijos Los nodos con dos hijos se denominan nodos internos. Los nodos con cero hijos se denominan nodos externos u hojas En un rbol-2, los nodos internos se grafican mediante crculos, y las hojas mediante cuadrados. Definicin En un rbol extendido, el nmero de nodos externos es igual al nmero de nodos internos mas uno. NE = NI + 1

RBOL BINARIO EXTENDIDO

rbol binario

rbol extendido

Un rbol binario puede convertirse a rbol-2 reemplazando todo rbol vaco por un nuevo nodo. Al extenderse un rbol binario, sus hojas se convierten en nodos internos, y los nodos aadidos se convierten en hojas. Los rboles extendidos se usan para representar rboles de expresiones aritmticas.

RBOLES DE EXPRESIONES
Un rbol ordenado puede usarse para representar una expresin aritmtica. El recorrido inorden del rbol produce la expresin en notacin infija. De igual forma los recorridos preorden y postorden producen la notacin prefija y postfija respectivamente. Un rbol de expresin es un rbol binario que cumple: Los nodos hojas estn etiquetados con operandos Los nodos no hojas estn etiquetados con operadores La sintaxis abstracta describe una expresin construida mediante la aplicacin de un operador binario OP a dos subexpresiones E1 y E2
RAZ

E1

E2

RBOLES DE EXPRESIONES Sea E una expresin aritmtica Si OP = +, entonces el valor de E es la suma de los valores de E1 y E2. Si OP = * entonces el valor de E es el producto de los valores de E1 y E2
Ejemplo:

* 5 8 + a notacin prefija notacin infija notacin postfija

Pre-orden In-orden Post-orden

*5+8a 5*8+a 58a+*

RBOLES DE EXPRESIONES Aunque generalmente en una expresin los operadores son binarios. Un rbol de expresin puede representar tambin expresiones de operadores no binarios
Ejemplo:

*
Seno

+ a Log

Orden previo Orden simtrico Orden Posterior

* Seno + a Log Seno * a + Log Seno a Log + *

APLICACIN DE RBOLES BINARIOS: EVALUACIN DE EXPRESIONES Hasta ahora todas las estructuras han sido consideradas como estructuras homogneas, ya que todos los elementos son del mismo tipo. Los rboles que contienen nodos de tipos diferentes se denominan heterogneos y un ejemplo de ellos son los rboles de expresin en los que los nodos contienen en su parte valor un operador si son internos, y un operando si son externos. Se presenta a continuacin una aplicacin para evaluar una expresin en notacin postfija. Registro Nodo Booleano Tipo Nodo // Tipo de Nodo: operando u Union // operador Carcter ValorCarcter Real ValorNumrico FinUnion Nodo *HI Nodo *HD FinRegistro Nodo *Raz // raz del rbol

APLICACIN DE RBOLES BINARIOS: EVALUACIN DE EXPRESIONES

Accin Evala(Raz): Tipo Real Inicio Real operando1, operando2 Carcter operador Si (Raz TipoNodo = operando) Retornar (Raz ValorNumrico) FinSi Operando1 Evala(Raz HI) Operando2 Evala(Raz HD) Operador Raz ValorCarcter Evala Operacin(Operador, Operando1, Operando2) Fin

RBOLES DE EXPRESIONES
Considrese el siguiente fragmento en C While (X != a[I]) I = I 1; El siguiente rbol muestra la sintaxis abstracta del fragmento. El While para el ciclo While, tiene dos hijos, que corresponden a la verificacin de la expresin y al cuerpo del ciclo While respectivamente. Los otros operadores en el rbol son != para verificar la desigualdad, ndice para la indicacin de arreglos, asigna para la asignacin y para la resta. While != x A ndice I I I asigna 1

CONSTRUCCIN DE UN RBOL DE EXPRESIN


Considrese una expresin W en notacin postfija. Presentamos un algoritmo para construir un rbol de expresin a partir de W Entrada: W expresin postfija Salida: A rbol de expresin Mtodo: Mientras existan smbolos 1. Leer carcter C leer expresin postfija smbolo por smbolo 2. Si C es operando Crear un rbol de un nodo Empilar en P, un apuntador p al nodo Sino (C es operador) Depilar los dos ltimos apuntadores a rboles p1 y p2 , Construimos un rbol con raz C (el operador) y sus hijos izquierdo y derecho que apuntan a p1 y p2 respectivamente, Empilamos p, el apuntador al nuevo rbol 3. En la pila quedar finalmente un apuntador al rbol de expresin

CONSTRUCCIN DE UN RBOL DE EXPRESIN Declaracin de un nodo de un rbol binario Registro Nodo Inicio T Valor Nodo *HI // apuntador al hijo izquierdo Nodo *HD // apuntador al hijo derecho FinRegistro

Accin Construye_rbol_de_Expresin(P) Inicio Leer C Mientras C // usado como centinela Si C es operando p nuevo Nodo p Valor C Empilar(P, p) Sino Depilar(P, p2 ) Depilar(P, p1 ) p nuevo Nodo p Valor C p HI p1 p HD p2 Empilar (P, p) FinSi Leer C FinMientras

RBOL BINARIO DE BSQUEDA


Un rbol binario de bsqueda ABB (binary search tree), tambin llamado rbol binario ordenado, es aquel en el cual sus nodos estn etiquetados con un valor de llave tomado de un conjunto E, estos elementos pueden ser complejos, pero por simplicidad supondremos que son enteros. En un rbol de bsqueda se cumple que: Para todo nodo N: Todos los valores de los nodos del subrbol izquierdo son menores que el valor de llave de N. Todos los valores de los nodos del subrbol derecho son mayores que el valor de la llave de N. Ejemplo:
38 14 3 19 49 53 70

RBOL BINARIO DE BSQUEDA El rbol binario de bsqueda ABB permite buscar y encontrar un
elemento, tambin permite insertar y borrar elementos fcilmente. Esta estructura contrasta con los arreglos y las listas: Arreglo unidimensional: aqu se puede buscar y encontrar fcilmente, pero es costoso insertar y eliminar, porque se tienen que hacer desplazamientos a la izquierda o a la derecha del elemento a eliminar o insertar. Listas enlazadas: aqu se puede insertar y eliminar fcilmente, pero es costoso buscar y encontrar un elemento, ya que se debe usar una bsqueda secuencial. La definicin de rbol binario de bsqueda dada asume que todos los valores de los nodos son distintos. Existe una definicin anloga de rbol binario de bsqueda que permite duplicados, esto es, en la que cada nodo N tiene la siguiente propiedad: El valor de N es mayor que cualquier valor del subrbol izquierdo de N y es menor o igual que cualquier valor del subrbol derecho de N

RBOL BINARIO DE BSQUEDA


Bsqueda de un elemento Supongamos que buscamos el valor V en un rbol ABB con raz R. La accin Buscar debe devolver la direccin p (apuntador) al nodo que contiene V, o nulo si no se encuentra. Si el rbol esta vaco (si R = Nulo), se devuelve p = Nulo. Sino se compara el valor del nodo actual con V, si son iguales se devuelve en p la direccin del nodo. Si no es as hacemos una bsqueda bien en el lado izquierdo del nodo o bien en el lado derecho del nodo dependiendo de la relacin del valor del nodo con V. Consideremos un rbol cuyos nodos son registros tipo Nodo Registro Nodo Inicio T Valor Nodo *HI // apuntador al hijo izquierdo Nodo *HD // apuntador al hijo derecho FinRegistro

RBOL BINARIO DE BSQUEDA


El siguiente algoritmo Buscar utiliza las siguientes variables: Raz : apuntador al nodo raz del rbol Val: Valor a buscar Pos: apuntador al nodo que contiene Val o nulo si no lo encuentra PosPad: apuntador al padre Cuando se busca Val en el rbol ABB se presentan cuatro casos: Caso1: Pos = Nulo y PosPad = Nulo rbol Nulo Caso2: Pos Nulo Y PosPad = nulo Val se encuentra en el nodo raz del rbol Caso3: Pos = Nulo y PosPad Nulo Val no se encuentra, pero puede aadirse al rbol como hijo de PosPad Caso4: Pos Nulo y PosPad Nulo Val se encuentra en un nodo que no es raz del rbol

Accin Buscar(Raz, Val, Pos, PosPad) Inicio Si (Raz = Nulo) Pos Nulo PosPad Nulo Sino n Raz Si (n Valor = Val) Pos Raz PosPad Nulo Sino Si (Val > n Valor) n n HD Sino n n HI FinSi Padre Raz encontr falso

Mientras(n Nulo encontr) Si (n Valor = Val) Pos n PosPad Padre encontr verdadero Sino Padre n Si (Val < n Valor) n n HI Sino n n HD FinSi FinSi FinMientras Si ( encontr) Pos Nulo PosPad Padre FinSi FinSi Fin

La bsqueda en el rbol ABB puede realizarse en forma recursiva: Funcin BusRec(R, Val): Tipo P Inicio Si (R = Nulo) Buscar Nulo Sino Si(Val < R Valor) Buscar BusRec(R Hi, Val) Sino Si (Val > R Valor) Buscar BusRec(R HD, Val) Sino Buscar R FinSi FinSi FinSi Retornar Buscar Fin

RBOL BINARIO DE BSQUEDA


INSERCIN DE UN ELEMENTO Para insertar un elemento V en un rbol ABB, se procede en forma similar a la bsqueda de un elemento. Si V se encuentra, no se hace nada. Si no es as, se inserta V en el ltimo espacio del camino recorrido.

Accin Insertar(Raz, Val) Inicio Pos Nulo PosPad Nulo Buscar(Raz, Val, Pos, PosPad) Si (Pos Nulo) Escribir Val, ya existe Sino n nuevo Nodo n Valor Val n HI Nulo n HD Nulo Si (PosPad = Nulo) Raiz n Sino Si (Val < PosPad Valor) PosPad HI n Sino PosPad HD n FinSi FinSi FinSi

Ejemplo: 12 5 2 7 Se insert 9 12 5 2 7 8 9 18 8 18

Accin InsertarRec(R, Val) // algoritmo recursivo de la insercin Inicio Si (R = Nulo) n nuevo nodo n Valor Val n HI Nulo n HD Nulo Rn Sino Si (Val < R Valor) InsertarRec (R HI, Val) Sino Si (Val > R Valor) InsertarRec(R HD, Val) Sino Escribir Val, ya existe FinSi FinSi FinSi Fin

RBOL BINARIO DE BSQUEDA


ELIMINACIN DE UN ELEMENTO Cuando se quiere eliminar un elemento, se presentan tres casos: Si el nodo es hoja, se elimina de inmediato. Si el nodo tiene un hijo, el nodo se puede eliminar haciendo un ajuste en un apuntador del padre, para saltar el nodo, modificando el apuntador del padre para que apunte al nodo hijo del nodo a eliminar. El caso complicado se da cuando el nodo a eliminar tiene dos hijos. En este caso, la estrategia consiste en sustituir el nodo a eliminar por el nodo con el valor ms pequeo del subrbol derecho, y eliminar este nodo.

RBOL BINARIO DE BSQUEDA


Accin Eliminar() Inicio Escribir Ingrese valor a eliminar Leer Val Buscar(Raz, Val, Pos, PosPad) Si (Pos = Nulo) Escribir Val, no existe en el rbol Sino Si (Pos HI Nulo Pos HD Nulo) Caso_B(Raz, Val, Pos, PosPad) Sino Caso_A(Raz, Val, Pos, PosPad) FinSi FinSi Fin

RBOL BINARIO DE BSQUEDA Caso_A Elimina el nodo N de la posicin Pos, donde N no tiene dos hijos. El puntero PosPad da la posicin del padre de N o si PosPad = Nulo, es que N es el nodo Raz. El puntero Hijo da la posicin del nico hijo de N, o si Hijo = Nulo es que N no tiene hijos.

Accin Caso_A(Raz, Val, Pos, PosPad) Inicio Si (Pos Hi = Nulo Pos HD =Nulo) Hijo Nulo Sino Si (Pos HI Nulo) Hijo Pos HI Sino Hijo Pos HD FinSi FinSi Si (PosPad Nulo) Si (Pos = PosPad HI) PosPad Hi Hijo Sino PosPad HD Hijo FinSi Sino Raiz Hijo FinSi Fin

Ejemplo: 12 5 2 7 Se elimin 8 12 5 2 7 8 18 8 18

RBOL BINARIO DE BSQUEDA Caso_B Elimina el nodo N de la posicin Pos, donde N tiene dos hijos. El puntero PosPad da la posicin del padre de N o si PosPad = Nulo, es que N es el nodo Raz. El puntero Suc da la posicin del sucesor inorden de N y PadSuc da la posicin del padre del sucesor inorden.

Accin Caso_B(Raz, Val, Pos, PosPad) Inicio T Pos n Pos HD Mientras (n HI Nulo) Tn n n HI FinMientras Suc n PadSuc T Caso_A(Raiz, Val, Suc, PadSuc) Si (PosPad Nulo) Si (Pos = PosPad HI) PosPad HI Suc Sino PosPad HD Suc FinSi Sino Raiz Suc FinSi Suc HI Pos HI Suc HD Pos HD

Ejemplo: 5 2 7

12 18 8

10
Se elimin 5

12 7 2 7 10 8 18

RBOLES ENHEBRADOS
En un recorrido inorden, la pila contiene la direccin del siguiente elemento inorden en el recorrido. Consideremos como alternativa que cada nodo con un subrbol derecho nulo, tiene en el apuntador hijo derecho, la direccin al sucesor inorden, esto hara que sea innecesario sacar de la pila la direccin del siguiente elemento en el recorrido. A este tipo de apuntadores se le conoce como hebra, y al rbol que contiene hebras se le denomina enhebrado. Este tipo de rbol requiere que cada nodo contenga adems de dos punteros a los hijos, un campo hebra para indicar si su apuntador derecho es o no una hebra. Un rbol enhebrado (Threaded tree) se basa en la propiedad de que una representacin de rbol basada en apuntadores desaprovecha muchos apuntadores que no apuntan a ningn nodo. Cuando un nodo no tiene hijo derecho, se sustituye su valor de apuntador derecho por su sucesor inorden, y cuando no tiene hijo izquierdo por su predecesor inorden.

RBOLES ENHEBRADOS
Consideremos un rbol representado por nodos definidos de la siguiente forma Registro Nodo T Valor Nodo *HI Nodo *HD Booleano Hebra FinRegistro Hebra es verdadero si HD es nulo o una hebra diferente de nulo, falso en otro caso. Nodo *Raz El booleano hebra es utilizado para indicar si HI o HD es un puntero al hijo izquierdo o al hijo derecho, o si son apuntadores (hebra) al predecesor inorden o al sucesor inorden respectivamente.

RBOLES ENHEBRADOS
A B D G H E I C F

El rbol de momento 9 tiene 18 apuntadores, de los cuales 10 son nulos (ms de la mitad). Estos apuntadores pueden reciclarse, utilizndose como apuntadores al sucesor inorden

RBOLES ENHEBRADOS A LA DERECHA Un rbol enhebrado a la derecha contiene hebras que apuntan al sucesor inorden derecho. Los nodos que no tienen hijo derecho, reemplazan sus punteros por un apuntador al sucesor inorden.
A B D G H E I C F

Hebras que apuntan al sucesor inorden.

Se presenta la accin recorrido inorden no recursivo para el rbol enhebrado Accin Recorrido(Raz) Inicio R Raz Repetir q Nulo Mientras(R Nulo) qR R R HI FinMientras Si (q Nulo) Escribir q Valor R q HD Mientras ( R Nulo q Hebra) Escribir R Valor qR R R HD FinMientras FinSi Mientras(q Nulo) Fin

RBOLES ENHEBRADOS A LA IZQUIERDA Un rbol enhebrado a la izquierda contiene hebras que apuntan al antecesor inorden izquierdo. Los nodos que no tienen hijo izquierdo, reemplazan sus punteros por un apuntador al nodo antecesor inorden.
A B D G H E I C F

Hebras que apuntan al antecesor inorden.

RBOLES PREHEBRADOS Y POSTHEBRADOS


RBOLES PREHEBRADOS Un rbol prehebrado puede definirse de manera similar a los rboles enhebrados. La diferencia radica en que los apuntadores derechos e izquierdos de nodos con valor Nulo son sustituidos respectivamente por los sucesores y antecesores preorden del nodo correspondiente, en cuyo caso se llaman prehebrado a la izquierda o prehebrado a la derecha respectivamente. RBOLES POSTHEBRADOS De manera similar en un rbol posthebrado los apuntadores derechos e izquierdos de nodos con valor Nulo son sustituidos respectivamente por los sucesores y antecesores postorden del nodo correspondiente, en cuyo caso se llamarn posthebrado a la izquierda o posthebrado a la derecha respectivamente.

RBOL EN MONTN El rbol en montn se usa en un algoritmo de ordenacin llamado ordenacin por montn. Este algoritmo mejora el tiempo de ejecucin en el peor caso comparado con el mtodo de ordenacin rpida. Definicin Un rbol binario A se dice en montn si: a) A es completo b) El valor de cada nodo de A es mayor que los valores de cualquiera de sus hijos.
97 88 66 55 94 95 48

RBOL EN MONTN Insercin en un rbol en montn Entrada: Lista de elementos. Salida: rbol en montn. Mientras existan elementos V en la entrada se proceder de la siguiente forma: 1. Se adiciona V al final de M de forma que M sigue siendo completo, aunque no necesariamente sea un rbol en montn. 2. Si al adicionar V al rbol, no resulta de montn, se hace subir V hasta su lugar apropiado en M hasta que M sea finalmente de montn.

95 40 30 25 56 80 61
9 5 4 0 8 0 3 0 2 5 5 6 6 1

Queremos aadir 45 a) Aumentamos 45 en la posicin k = 8

95 40 30 45 25 56 80

9 5

4 0

8 0

3 0

2 5

5 6

6 1

4 5

61

b) Comparamos A(k) = 45 con su padre que se encuentra en A(k/2) = A(4) = 30 c) Como 30 < 45 los cambiamos, as 45 aparece como padre de 30 y como hijo de 40. d) Como 45 > 40 los cambiamos y 45 queda como padre de 40.

Finalmente queda 95 45 40 30 25 56 80 61
9 5 4 5 8 0 4 0 2 5 5 6 6 1 3 0

RBOL EN MONTN Insercin en un rbol en montn El rbol en montn con N elementos est guardado en el vector M. La accin Insercin_Montn inserta V como un nuevo elemento del rbol. N se incrementa en 1. P da la posicin de V a medida que sube por el rbol y PAD indica la posicin del padre de V.

Accin Insercin_Montn(M,N,V) Inicio NN+1 PN Montn falso Mientras (P > 1 Montn) Pad P/2 Si (V M(Pad)) M(P) V Montn verdad Sino M(P) M(Pad) P Pad FinSi FinMientras If (Montn) M(1) V FinSi Fin

RBOL EN MONTN Eliminacin de la raz en un rbol en montn Entrada: rbol en montn M con N elementos Salida: rbol en montn M con N-1 elementos V = M(1) raz del rbol M Procedimiento: Para eliminar la raz en un rbol en montn M: 1. Asignamos la raz M(1) a la variable V 2. Reemplazamos el nodo raz a eliminar con el ltimo nodo que fue adicionado en M, de modo que M sigue siendo completo, aunque no necesariamente un rbol en montn. 3. Reamontonamos, haciendo que la nueva raz se mueva a su lugar adecuado para que M sea finalmente un rbol en montn.

Accin Elimina_Raz(M,N,V) Inicio V M(1) U M(N) NN1 P1 HI 2 HD 3 Montn falso Mientras (HD N Montn) Si (U M(HI) U M(HD)) Fin M(P) U Montn verdad Sino Si (M(HD) M(HI)) M(P) M(HI) P HI Sino M(P) M(HD) P HD FinSi HI 2*P

HD 2*P+1 FinSi FinMientras Si (Montn) Si(HI = N U < M(HI)) M(P) M(HI) P HI FinSi M(P) U FinSi

RBOL EN MONTN
CREACIN DE UN RBOL EN MONTN Se tiene una fila F de enteros. Se quiere construir una aplicacin para crear un rbol en montn teniendo como entrada la fila F de enteros. Entrada: F fila secuencial no vaca Salida: M rbol en montn Procedimiento: 1. Primer(F) abre la fila F 2. Tomar(F,V) toma el primer elemento de F y lo guarda en V. Luego asignar V a M(1) 3. Tomar(F, V) toma el siguiente elemento de F y lo guarda en V 4. El ciclo Mientras se ejecuta mientras existan elementos en la fila. El ciclo consiste en: Insertar el elemento tomado de F en el rbol en Montn M Tomar el siguiente elemento de F.

RBOL EN MONTN
Accin Crea_rbol_Montn(F, M) Inicio Primer(F) Tomar(F,V) N1 M(N) V Tomar(F,V) Mientras(ltimo(F)) Insercin_Montn(M, N, V) // inserta V en el vector M con N elementos Tomar(F, V) FinMientras Fin

RBOL EN MONTN
ORDENAMIENTO EN MONTN Sea M un rbol en montn de N elementos, lo que quiere decir que el nodo raz corresponde al mayor valor del rbol. Si extraemos la raz y la colocamos en una lista, y reemplazamos la raz por el ltimo nodo, es posible que el rbol resultante no sea un montn, en este caso lo reamontonamos para convertirlo en un rbol en montn. Nuevamente eliminamos la raz y la adicionamos en la lista, y as proseguimos hasta que el rbol este vaco, y todos sus elementos se hayan pasado a la lista en orden descendente.

RBOL EN MONTN
ORDENAMIENTO EN MONTN Entrada: rbol en montn Salida: lista de elementos en orden descendente. Procedimiento: Mientras el rbol en montn no sea vaco, repetir los pasos: 1 Eliminar la raz, y colocar el elemento en la lista 2 Reemplazar la raz con el ltimo nodo del rbol. Si el rbol resultante no es un montn, entonces se reamontonar para convertirlo en un montn, luego se continuar en el paso 1. Accin Ordena_Montn(M, N) Inicio Cab Nulo Mientras (N > 0) Elimina_Raz(M, N, V) Adiciona(Cab, V, U) // adiciona V en la lista FinMientras Fin

Eliminamos la raz : 52 52 48 21 45 7 21 L: 52 Eliminamos la raz : 48 48 45 21 7 45 L: 52, 48 21 7 48 45 7

Eliminamos la raz : 45 45 21 7 21 L: 52, 48, 45 Eliminamos la raz : 21 21 7 Eliminamos la raz : 7 L: 52, 48, 45, 21, 7 7 L: 52, 48, 45, 21 7

RBOL EN MONTN
COMPLEJIDAD DE LA ORDENACION POR MONTN En la construccin del rbol en montn M, el nmero de comparaciones para encontrar el sitio adecuado para un nuevo elemento V no puede exceder a la profundidad del rbol. Como M es un rbol completo, su profundidad esta limitada por log2m, donde m es el nmero de elementos del rbol M. De este modo, el nmero de comparaciones g(n) para insertar los n elementos del rbol est limitado por: g(n) n log2 n Para eliminar los n elementos del rbol M, dado que el rbol es completo con m elementos y que los subrboles izquierdo y derecho de M son montones, se elimina la raz y para reamontonar se efectan cuatro comparaciones para mover el nuevo nodo raz (el ltimo del rbol) un paso abajo en el rbol. Como la profundidad del rbol no excede a log2m, al reamontonar se efectan a lo mas 4 log2m comparaciones para encontrar el lugar adecuado del nuevo nodo raz. Si h(n) es el nmero total de comparaciones para eliminar los n elementos de M, lo que requiere reamontonar n veces, esta limitado por: h(n) 4n log2 n El tiempo de ejecucin para la ordenacin es proporcional a n log2 n, o sea, f(n) = O(n log2 n). El tiempo de ejecucin de la ordenacin por el mtodo de la burbuja es O(n2). El tiempo medio de ejecucin de la ordenacin rpida es

RBOL DE HUFFMAN
Recordemos que un rbol binario extendido o rbol-2 es un rbol binario en el que cada nodo tiene 0 o 2 hijos. Los nodos con 0 hijos se llaman nodos externos y los nodos con 2 hijos se llaman nodos internos. Los nodos internos estn representados por crculos y los nodos externos estn representados por cuadrados. En cualquier rbol-2 el nmero NE de nodos externos es el nmero NI de nodos internos mas 1; o sea, NE = NI + 1 La longitud de camino externo LE de un rbol-2 es la suma de todas las longitudes de camino obtenidas sobre cada camino desde la raz R hasta un nodo externo. La longitud de camino interno LI de un rbol-2 es la suma de todas las longitudes de camino obtenidas sobre cada camino desde la raz R hasta un nodo interno. Para cualquier rbol-2 con n nodos internos LE = LI + 2n

RBOL DE HUFFMAN
Suponga que T es un rbol-2 con n nodos externos y suponga que cada nodo externo tiene asignado un peso (no negativo). La longitud de camino con peso (externo) P del rbol T se define como la suma de las longitudes de camino con sus pesos P = W1 L1 + W2 L2 + .... + Wn Ln donde Wi y Li denotan respectivamente, el peso y la longitud del camino del nodo externo Ni . Si consideramos la coleccin de rboles-2 con n nodos externos y a cada rbol-2 se le dan los mismos n pesos para sus nodos externos. Entonces no est claro que rbol tenga la mnima longitud de camino con peso. El problema general que queremos resolver es el siguiente: Suponga una lista de n pesos dada: w1 , w2 , ...., wn Entre todos los rboles-2 con n nodos externos y con los n pesos dado, encontrar un rbol T con una longitud de camino con peso

RBOL DE HUFFMAN
Algoritmo de Huffman Se define recursivamente en funcin del nmero de pesos. La solucin para un solo peso es simplemente el rbol con un solo nodo. Entrada: S secuencia de nodos Salida: A rbol Huffman Mtodo: Repetir hasta que S contenga un solo nodo 1. Elegir de S dos nodos n1 y n2 con menor peso w1 y w2 respectivamente. 2. Eliminar n1 y n2 de S. 3. Adicionar un nuevo nodo con peso w = w1 + w2

RBOL DE HUFFMAN
Accin Huffman(S, n) Inicio Si n = 2 Elegir n1 con peso w1 Elegir n2 con peso w2 T construye(w1 , w2) Retornar(T) Sino Elegir nodos ni, nj con menor peso wi y wj X ni Y nj Adicionar nodo Z con peso w = wi + wj Enlazar X como hijo izquierdo de Z Enlazar Y como hijo derecho de Z T Huffman(S, n-1) Retornar(T)

A: 22

B: 5

C: 11

D: 19

E: 2

F: 11

G: 25

H: 5

A: 22

C: 11

D: 19

F: 11

G: 25

H: 5

E: 2

B: 5

A: 22

C: 11

D: 19

12

F: 11

G: 25

H: 5

E: 2

B: 5

A: 22

D: 19

12

22

G: 25

H: 5

F: 11

C: 11

E: 2

B: 5

A: 22

31

22

G: 25

12

D: 19

F: 11

C: 11

H: 5

E: 2

B: 5

31

44

G: 25

12

D: 19

A: 22

22

H: 5

F: 11 B: 5

C: 11

E: 2

56 G: 25 12

44 31 A: 22 D: 19 F: 11 C: 11 22

H: 5 E: 2

B: 5

100 44 A: 22 F: 11 G: 25 C: 11 H: 5 E: 2 12 56

22

31

D: 19 7 B: 5

IMPLEMENTACIN DEL RBOL DE HUFFMAN


Se crea un bosque de rboles. Cada rbol corresponde a un nodo de una lista que contiene informacin acerca del valor del nodo, puntero al hijo izquierdo, puntero al hijo derecho, un campo para el peso (probabilidad o frecuencia) y un puntero al siguiente rbol del bosque. Registro Nodo carcter Valor Nodo *HI // puntero al hijo izquierdo Nodo *HD // puntero al hijo derecho Nodo *Hermano // puntero al siguiente rbol del bosque Numrico Peso // peso del nodo FinRegistro Nodo *Raz

IMPLEMENTACIN DEL RBOL DE HUFFMAN


Precondicin La lista enlazada est ordenada por peso y contiene ms de dos nodos Postcondicin El bosque contiene solo un rbol (de Huffman) Mtodo: los nodos se van agrupando de dos en dos hasta que solo un rbol es el bosque (de Huffman) Accin Huffman(R) // en forma recursiva Inicio HI Seleccionar_Menor(R) HD Seleccionar_Menor(R) P Construye_Padre(HI, HD) Inserta_Padre(R, P) Si (R Hermano = Nulo) Retornar P Sino P Huffman (R) Retornar P FinSi Fin

IMPLEMENTACIN DEL RBOL DE HUFFMAN


Accin Huffman(R) // en forma iterativa Inicio Mientras(R Hermano Nulo) HI Seleccionar_Menor(R) HD Seleccionar_Menor(R) P Construye_Padre(HI, HD) Inserta_Padre(R, P) FinMientras Retornar R Fin

Accin Seleccionar_Menor(R) Inicio PR R P Hermano P Hermano Nulo Retornar P Fin

IMPLEMENTACIN DEL RBOL DE HUFFMAN


La accin Construye_Padre crea un nodo ficticio n y le asigna como hijos los dos nodos seleccionados previamente. Accin Construye_Padre(P, Q) Inicio n nuevo nodo n Peso P Peso + Q Peso n HI P n HD Q n Hermano Nulo Retornar n Fin

La accin Inserta_Padre inserta el nuevo nodo N construido en la lista con cabecera R en el lugar que le corresponde segn su peso. Accin Inserta_Padre(R, N) Inicio Si (R = Nulo) RN Sino PR Si (P Peso > N Peso) N Hermano R RN Sino Mientras(N Peso > P Peso P Hermano Nulo) Ant P P P Hermano FinMientras Si (P Peso N Peso) N Hermano P Ant Hermano N Sino N Hermano P Hermano P Hermano N FinSi FinSi FinSi Fin

APLICACIN EN CODIFICACIN
Suponga que un conjunto de n datos A1, A2, ..., An, a ser codificados mediante cadena de r bits donde 2r-1 < n 2r Suponga que los elementos no se dan con la misma probabilidad. Entonces se puede preservar espacio de memoria usando cadenas de longitud variable, de forma que a los elementos que aparezcan ms frecuentemente se les asigna cadenas de menor longitud, quedando las de mayor longitud para aquellos datos menos frecuentes. Considere el rbol-2 T cuyos nodos externos son los elementos U, V, W, X, Y y Z de la figura siguiente. Observe que cada arista de un nodo interno hacia su hijo izquierdo esta etiquetada con un 0 y cada arista derecha con un 1. El cdigo Huffman asigna a cada nodo externo la secuencia de bits desde la raz al nodo. El rbol T de Huffman determina un cdigo para los nodos externos; U: 00 V:01 W: 100 X:1010 Y:1011 Z:11 Este cdigo tiene la propiedad prefija; esto es, el cdigo de cualquier elemento no es una subcadena inicial del cdigo de otro elemento. Esto significa que no existe ambigedad al decodificar cualquier mensaje que usa el cdigo Huffman.

APLICACIN EN CODIFICACIN 0 0 U 1 V 0 W 0 X
U:00 V:01

1 0 1 1 Z

1 Y

W:100 X:1010 Y:1011 Z:11

GRAFOS NO DIRIGIDOS En muchos problemas derivados de la ciencia de la computacin, matemticas, ingeniera y muchas reas se presentan relaciones entre objetos de datos. Las relaciones entre objetos de datos de un conjunto pueden presentarse en forma de grafos, los cuales a su vez pueden representarse mediante matrices de adyacencias. Un grafo, corresponde a una relacin matemtica o una matriz en lgebra, por tanto las propiedades que pueden aplicarse a uno de los tres modelos puede ser aplicado a cualquiera de los otros dos. Si decimos que una relacin es simtrica, decimos que el grafo asociado a la relacin tambin es simtrica, la matriz asociada tambin es simtrica. En muchas aplicaciones de computacin e informtica se estudian relaciones simtricas correspondientes a grafos no dirigidos.

GRAFOS NO DIRIGIDOS
Definicin Un grafo G es un modelo matemtico definido como el par (V, A) donde: V: es el conjunto finito de vrtices o nodos A: es el conjunto finito de aristas o arcos V = {vi / vi es un vrtice o nodo, vi V} A = {ai / ai es una arista o camino, ai V x V} Podemos definir G como una relacin de la siguiente forma: A = {(u, v) / u, v V} El conjunto A corresponde a la relacin R definida de la siguiente forma: u R v si y solo si existe una arista a = (u, v) Si el par (u, v) es ordenado decimos que G es grafo dirigido (dgrafo), si no lo es decimos que es un grafo no dirigido.

GRAFOS NO DIRIGIDOS Definicin Si existe la arista (u, v), decimos que la arista es incidente sobre los vrtices u, v. Decimos que el vrtice v es adyacente al vrtice u. El vrtice u es el vrtice origen, y v es el vrtice destino o terminal. Si un vrtice no tiene aristas incidentes, decimos que es un vrtice aislado o solitario. Definicin Un grafo no dirigido corresponde a una relacin simtrica, pues u R v, podemos decir tambin que v R u. Como R es simtrica, decimos que u y v son vrtices adyacentes, porque v es adyacente a u, y u es adyacente a v.

GRAFOS NO DIRIGIDOS Grado de un vrtice Sea G = (V, A) un grafo no dirigido. Para cualquier vrtice v V, el grado de v, se denota por grad(v), es el nmero de aristas que son incidentes con v

a d Grad(a) = 2 Grad (c) = 4 Grad(g) = 4

b e f

c g

SUBGRAFOS Sea G = (V, A) un grafo. El grafo G = (V, A) es un subgrafo de G, si A A, y cada arista de A es incidente con los vrtices de V

a b c e (a) d b

a c e (b)

a d e (c)

El grafo (b) y (c) son dos subgrafos del grafo (a)

SUBGRAFOS INDUCIDOS
Sea G = (V, A) un grafo Sea G = (V, A) un subgrafo de G Si A consta de todas las aristas (u,v) A tal que u y v V entonces decimos que G es un subgrafo inducido Por ejemplo: El grafo (c) es inducido pero el grafo (b) no lo es porque falta la arista (b, e). Grafos completos Sea G = (V, A) un grafo. Si |V| = n, el grafo completo sobre V, se denota Gn es un grafo no dirigido sin lazos tal que para todo a, b V donde a b, existe una arista (a, b). Es decir deben existir aristas entre todos los vrtices. Por lo tanto tiene (n*(n-1))/2 aristas.

G1

G2

G3

G4

G1, G2 , G3 y G4 son grafos completos

GRAFO PLANO Un grafo es plano si podemos dibujar G en el plano de modo que sus aristas se intersecten solo en los vrtices de G. Este dibujo se conoce como una inmersin de G en el plano.
El grafo es plano Cada vrtice tiene grado 3 Ningn par de aristas se Intersectan, excepto en los vrtices

Un mapa de carreteras y autopistas puede representarse mediante un grafo plano. Generalmente las carreteras se intersectan en los puntos de confluencia o en poblaciones. Excepcionalmente, en los pasos a desnivel las carreteras se intersectan.

GRAFO BIPARTITO Definicin Sea G = (V, A) un grafo, G se denomina bipartito, si V se puede descomponer en dos subconjuntos V1 y V2 donde V = V1 V2 tal que no existen dos vrtices adyacentes en V1 ni tampoco en V2
a
b

a b c

c d e

(a) (b) El grafo (a) es bipartito pues V se puede dividir en {a, d}y {b, c, e}. El grafo (b) no es bipartito.

GRAFO BIPARTITO COMPLETO Y GRAFOS ISOMORFOS


Definicin Sea G = (V, A) un grafo, G se denomina bipartito, si V se puede descomponer en dos subconjuntos V1 y V2 donde V = V1 V2 y V1 V2 = . Si cada vrtice de V1 est unido con los vrtices de V2 , se tiene un grafo bipartito completo. Si |V1| = m y |V2| = n El grafo se denota como Gmn Definicin Sean los grafos no dirigidos G1 = (V1, A1) y G2 = (V2, A2). Una funcin : V1 V2 es un isomorfismo entre G1 y G2 , si a) es inyectiva y sobreyectiva b) a, b V1 , (a, b) A1 si y solo si ((a), (b)) A2 Cuando existe la funcin , decimos que G1 y G2 son isomorfos Un isomorfismo es una correspondencia entre cada elemento de un

b q

p r s (b)

c (a)

Los grafos (a) y (b) son isomorfos, porque existe una correspondencia entre los nodos (a) = p, (b) = r, (c) = q y (d) = s La correspondencia entre los vrtices de un isomorfismo mantiene las adyacencias.

GRAFOS CONEXOS
Definicin Sea G = (V, A) un grafo no dirigido, G es conexo si existe un camino simple entre cualquier par de vrtices de G. Si un grafo no es conexo, decimos que es disconexo. a b d (a) c e f a b d (b) c e

El grafo (a) es conexo. El grafo (b) no es conexo, e es un nodo aislado.

GRAFOS CONEXOS
Componentes conexos en un grafo no dirigido Un componente conexo de un grafo G es un subgrafo conexo inducido maximal, es decir un grafo conexo inducido que por si mismo no es un subgrafo propio de ningn otro subgrafo conexo de G. a b a b

d (a)

d (b)

(c)

(a) Es un grafo conexo que tiene solo un componente conexo, el mismo (b) Es uno de los subgrafos inducidos de (a) (c) Es un grafo que contiene dos componentes conexos

REPRESENTACIN DE GRAFOS NO DIRIGIDOS Un grafo no dirigido puede representarse de igual forma que un grafo dirigido, mediante una matriz de adyacencia simtrica o una lista de adyacencia. Aunque es necesario entender que una arista no dirigida (u, v), puede representarse como dos aristas dirigidas, una (u, v) y otra (v, u). Un grafo dirigido puede representarse como una relacin simtrica, haciendo uso de estructuras de datos: Arreglos bidimensionales (matriz de adyacencia simtrica) Listas enlazadas (lista de adyacencia)

REPRESENTACIN MEDIANTE MATRIZ DE ADYACENCIA Un grafo no dirigido puede representarse mediante una matriz de adyacencia, en donde se representen las aristas desde el vrtice i al vrtice j con un 1 en la entrada [i, j], y un cero cuando no exista una arista. La matriz de adyacencia juega un rol muy importante, pues a partir de ella pueden encontrarse otras matrices que relacionan los caminos de longitud mayor a uno, y a partir de ella encontrar la matriz de caminos. 1 3 Grad(1) = 2 2
0 1 1 1 0 1 1 1 1 Matriz de Adyacencia simtrica

Grad(2) = 2

Grad(3) = 4

A partir de la matriz de adyacencia se puede obtener el grado de un vrtice. Entrada : A matriz de dimensin N x N Salida : grado(u), u el vrtice a verificar La funcin Obtener grado(u) suma los elementos de la fila u. Cuando encuentra un 1 en la columna j, significa que j es adyacente a u. Despus de sumar toda la fila correspondiente al vrtice que se esta verificando, se suma el elemento A[i, i] que significa 1 si es un bucle o 0 si no hay un bucle. Funcin Obtener_Grado(A, N, u) : Entero Inicio iu grado 0 Para j desde 1 hasta N grado grado + A[i, j] FinPara grado grado + A[i, i] // suma el bucle si lo hubiese Retornar grado Fin

REPRESENTACIN MEDIANTE LISTAS ENLAZADAS Lista de adyacencia Una lista de adyacencia es una lista de los vrtices. Cada uno de los vrtices apunta a su vez a una lista de los vrtices adyacentes.

1 2 3

2 1 1

3 3 2

* * 3 *

RECORRIDO DE UN GRAFO NO DIRIGIDO Recorrido en profundidad REP en un grafo no dirigido La idea general del recorrido en profundidad comenzando en un nodo v es la siguiente: Primero examinamos el nodo inicial. Luego examinamos un nodo adyacente (vecino) a v, luego un adyacente del adyacente de v y as sucesivamente hasta llegar a un punto muerto, o sea al final del camino. Al volver si hay otro nodo adyacente a v no visitado, se toma como punto de partida este nodo y se realiza el mismo procedimiento. Cuando estn examinados (visitados) todos los nodos adyacentes a v, el recorrido que se inicio con v ha finalizado. Si queda algn nodo sin visitar, tomamos cualquiera de ellos y procedemos como con el nodo v. El procedimiento sigue hasta que estn examinados (visitados) todos los nodos del grafo.

RECORRIDO DE UN GRAFO NO DIRIGIDO


Recorrido en profundidad REP en un grafo no dirigido Entrada: G grafo, v vrtice inicial, que ser la raz del rbol Salida: A rbol abarcador Precondicin: La bsqueda empieza en el nodo v Accin Recorrido() Inicio Para cada v V Visita(v) 0 // inicializa los nodos como no visitados FinPara Para cada v V Si (Visita(v) = 0) REP(v) // llama a procedimiento de bsqueda FinSi FinPara Fin

RECORRIDO DE UN GRAFO NO DIRIGIDO


Recorrido en profundidad REP en un grafo no dirigido Accin REP(v) Inicio Visita(v) 1 // cuando se visita el nodo v su estado cambia a 1 Para cada nodo w adyacente a v Si (Visita(w) = 0)

Inserta(A, v, w) // inserta la arista (v, w) en A


REP(w) // llama a procedimiento REP para w FinSi FinPara Fin La recursin slo se detiene cuando la exploracin del grafo se ve bloqueada (en un punto muerto) y no se puede proseguir.

REP = recorrido en profundidad 2BP(1) llamada inicial 3 BP(2) llamada recursiva 4 BP(3) llamada recursiva 5 BP(6) llamada recursiva 6 BP(5) llamada recursiva, no se puede continuar 7 BP(4) no se ha visitado el nodo 4 vecino de 1 8 BP(7) llamada recursiva 9 BP(8) llamada recursiva, no se puede continuar 10No quedan nodos por visitar

Cada nodo de G se visita solo una vez. Por lo tanto el algoritmo recursivo se invoca n veces. El recorrido en profundidad de un grafo conexo asocia un rbol abarcador (recubridor), en donde el punto de partida elegido pasa a ser la raz del rbol. Si el grafo no es conexo, entonces un recorrido en profundidad, asocia al grafo un bosque de rboles abarcadores. Uno para cada componente conexo. En el ejemplo anterior se construye el rbol abarcador: 1 2 3 6 5 4 7 8

Puntos de articulacin En un grafo conexo, puede existir un vrtice que sirva de articulacin entre dos componentes conexos. En el ejemplo el vrtice 1 es de articulacin, ya que si se elimina el vrtice 1 y las aristas que inciden en1, se obtendra un subgrafo que ya no es conexo. Quedaran dos componentes conexos. 1 4 3 7 6 2 5

Si se elimina el vrtice 1 y las aristas que inciden en el, se obtendra un grafo que ya no es conexo. 4 3 2 6 5

Un grafo se denomina biconexo si carece de puntos de articulacin.

RECORRIDO DE UN GRAFO NO DIRIGIDO


Recorrido en amplitud REA en un grafo no dirigido En un recorrido en amplitud, el recorrido se inicia con un nodo de partida v. A continuacin se visitan los nodos adyacentes al nodo inicial v (nodos a una distancia 1 del nodo v), luego se visitan los nodos que estn a una distancia 2 y as sucesivamente hasta que no quede ningn nodo por visitar. El algoritmo de recorrido en amplitud no es recursivo Entrada: G grafo, v vrtice inicial, que ser la raz del rbol Salida: A rbol abarcador Precondicin: La bsqueda empieza en el nodo v La cola C debe estar vaca.

RECORRIDO DE UN GRAFO NO DIRIGIDO


Accin REA(v) Inicio Init(C) // cola vaca Visita(v) 1 // v es visitado Encolar(C, v) Mientras (Vaco(C)) Decolar(C, v) Mientras exista w adyacente a v Si (Visita(w) = 0) Visita(w) 1 Inserta(A, v, w) // inserta la arista (v, w) en el rbol A Encolar(C,w) FinSi FinMientras FinMientras Fin

F E G

Si se comienza con A, se visitan los nodos Origen A primero B, C, D distancia 1 luego F, G distancia 2 Finalmente E distancia 3 Si se comienza con E, se visitan los nodos Origen E primero F, G distancia 1 luego B, D distancia 2 finalmente A, C distancia 3

También podría gustarte