Post on 07-Oct-2015
description
Estructuras de Datos
Ricardo Ruiz Rodrguez
67
Captulo 6. RBOLES.
6.1 rboles binarios. Un rbol binario es un conjunto finito de elementos, el cual est
vaco o dividido en tres subconjuntos separados:
El primer subconjunto contiene un elemento nico llamado raz del rbol.
El segundo subconjunto es en s mismo un rbol binario y se le conoce como subrbol izquierdo del rbol original.
Estructuras de Datos
Ricardo Ruiz Rodrguez
68
El tercer subconjunto es tambin un rbol binario y se le conoce como subrbol derecho del rbol original.
El subrbol izquierdo o derecho puede o no estar vaco.
Cada elemento de un rbol binario se conoce como nodo del
rbol.
La Ilustracin 2 muestra una representacin de un rbol binario.
Ejercicio: Una lista podra ser un rbol binario? Una lista
doblemente enlazada? Por qu? Qu otros ejemplos podran o no
considerarse como rboles binarios?
Estructuras de Datos
Ricardo Ruiz Rodrguez
69
Ilustracin 2 rbol binario. Si B es la raz de un rbol binario y D es la raz del subrbol
izquierdo/derecho, se dice que B es el padre de D y que D es el
hijo izquierdo/derecho de B.
Estructuras de Datos
Ricardo Ruiz Rodrguez
70
A un nodo que no tiene hijos, tal como A o C de la Ilustracin
2, se le conoce como hoja.
Un nodo n1 es un ancestro de un nodo n2 (y n2 es un
descendiente de n1) si n1 es el padre de n2 o el padre de algn
ancestro de n2.
Recorrer un rbol de la raz hacia las hojas se denomina
descender el rbol y al sentido opuesto ascender el rbol.
Un rbol estrictamente binario es aquel en el que cada nodo
que no es hoja, tiene subrboles izquierdo y derecho que no estn
vacos.
Estructuras de Datos
Ricardo Ruiz Rodrguez
71
Un rbol estrictamente binario con n hojas siempre contiene
2n-1 nodos.
El nivel de un nodo en un rbol binario se define del modo
siguiente:
1.La raz del rbol tiene el nivel 0.
2.El nivel de cualquier otro nodo en el rbol es uno ms que el
nivel de su padre.
La profundidad o altura de un rbol binario es el mximo
nivel de cualquier hoja en el rbol.
Estructuras de Datos
Ricardo Ruiz Rodrguez
72
Un rbol binario completo de profundidad p, es un rbol
estrictamente binario que tiene todas sus hojas en el nivel p.
6.2 Operaciones en rboles binarios. Se aplican varias operaciones primitivas a un rbol binario.
Si p es un apuntador a un nodo nd de un rbol binario:
1.La funcin info(p) regresa el contenido de nd.
2.La funcin left(p) regresa un apuntador al hijo izquierdo de
nd.
3.La funcin right(p) regresa un apuntador al hijo derecho de
nd.
Estructuras de Datos
Ricardo Ruiz Rodrguez
73
4.La funcin father(p) regresa un apuntador al padre de nd.
5.La funcin brother(p) regresa un apuntador al hermano de nd.
6.La funcin isLeft(p) regresa true si nd es un hijo izquierdo de
algn otro nodo en el rbol, y false en caso contrario.
7.La funcin isRight(p) regresa true si nd es un hijo derecho de
algn otro nodo en el rbol, y false en caso contrario.
En la construccin de un rbol binario son tiles las
operaciones:
Estructuras de Datos
Ricardo Ruiz Rodrguez
74
1.makeTree(x) crea un nuevo rbol que consta de un nodo
nico con un campo de informacin x, y regresa un apuntador
a este nodo.
2.setLeft(p, x) crea un nuevo hijo izquierdo de node(p) con el
campo de informacin x.
3.setRight(p, x) crea un nuevo hijo derecho de node(p) con el
campo de informacin x.
6.3 Aplicaciones de rboles binarios. Un rbol binario es una estructura de datos til cuando deben
tomarse decisiones en dos sentidos en cada punto de un proceso.
Estructuras de Datos
Ricardo Ruiz Rodrguez
75
Suponga que se desea encontrar todos los duplicados de una
lista de nmeros.
Considrese lo siguiente:
1.El primer nmero de la lista se coloca en un nodo que se ha
establecido como la raz de un rbol binario con subrboles
izquierdo y derecho vacos.
2.Cada nmero sucesivo en la lista se compara con el nmero
en la raz, aqu se tienen 3 casos:
a. Si coincide, se tiene un duplicado.
b.Si es menor, se examina el subrbol izquierdo.
Estructuras de Datos
Ricardo Ruiz Rodrguez
76
c. Si es mayor, se examina el subrbol derecho.
3.Si alguno de los subrboles esta vaco, el nmero no es un
duplicado y se coloca en un nodo nuevo en dicha posicin del
rbol.
4.Si el subrbol no est vaco, se compara el nmero con la raz
del subrbol y se repite todo el proceso con el subrbol.
Un rbol binario de bsqueda (ABB) no tiene valores
duplicados en los nodos y adems, tiene la caracterstica de que:
1.Los valores en cualquier subrbol izquierdo son menores que
el valor en su nodo padre.
Estructuras de Datos
Ricardo Ruiz Rodrguez
77
2.Los valores en cualquier subrbol derecho son mayores que el
valor en su nodo padre.
El rbol binario de bsqueda de la Ilustracin 3 fue construido
dada la siguiente secuencia de elementos:
14, 15, 4, 9, 7, 18, 3, 5, 16, 4, 20, 17
Ejercicio: realice la insercin de los elementos anteriores y
compare su rbol con el de la Ilustracin 3.
Una operacin comn es recorrer todo un rbol binario en un
orden especfico.
Estructuras de Datos
Ricardo Ruiz Rodrguez
78
Ilustracin 3 rbol binario de bsqueda. A la operacin de recorrer un rbol de una forma especfica y
de numerar sus nodos, se le conoce como visitar el rbol
(procesar el valor del nodo).
Estructuras de Datos
Ricardo Ruiz Rodrguez
79
Ejercicio: Cul es el orden natural de recorrido de una lista?
Cul sera el orden natural de recorrido de un rbol?
En general, se definen tres mtodos de recorrido de un rbol
binario.
Antes de presentarlos se debern tener en mente las siguientes
consideraciones:
1.No se necesita hacer nada para un rbol binario vaco.
2.Todos los mtodos se definen recursivamente.
3.Siempre se recorren la raz y los subrboles, la diferencia
radica en el orden en que se visitan.
Estructuras de Datos
Ricardo Ruiz Rodrguez
80
Para recorrer un rbol binario no vaco en orden previo (orden
de primera profundidad) se ejecutan tres operaciones:
1.Visitar la raz.
2.Recorrer el subrbol izquierdo en orden previo.
3.Recorrer el subrbol derecho en orden previo.
Para recorrer un rbol binario no vaco en orden (orden
simtrico) se ejecutan tres operaciones:
1.Recorrer el subrbol izquierdo en orden.
2.Visitar la raz.
Estructuras de Datos
Ricardo Ruiz Rodrguez
81
3.Recorrer el subrbol derecho en orden.
Para recorrer un rbol binario no vaco en orden posterior se
ejecutan tres operaciones:
1.Recorrer el subrbol izquierdo en orden posterior.
2.Recorrer el subrbol derecho en orden posterior.
3.Visitar la raz.
Ejercicios a desarrollar con rboles:
1.Ordenamiento de nmeros e identificacin de elementos
repetidos almacenados en una lista.
Estructuras de Datos
Ricardo Ruiz Rodrguez
82
2.rboles de expresiones.
3.Determinar el nmero de nodos de un rbol binario.
4.La suma de todos los nodos.
5.La profundidad de un rbol binario.
6.Determinar si un rbol binario es o no estrictamente binario.
7.Determinar si un rbol binario es o no completo de nivel p.
6.4 Eliminacin de un ABB. La eliminacin es el problema inverso a la insercin, sin
embargo, las cosas no son tan sencillas como para la insercin.
Estructuras de Datos
Ricardo Ruiz Rodrguez
83
Si el nodo que se pretende eliminar es un nodo hoja o un nodo
con un solo descendiente, la eliminacin es directa.
La dificultad radica en la eliminacin de un nodo con dos
descendientes. En este caso, el elemento eliminado ser substituido
por el descendiente ms a la derecha de su subrbol izquierdo (o
bien por el descendiente ms a la izquierda de su subrbol
derecho).
Obsrvese que estos nodos substitutos tienen a lo ms, un
descendiente.
Lo anterior queda mejor representado en la Ilustracin 4.
Estructuras de Datos
Ricardo Ruiz Rodrguez
84
Ilustracin 4. Eliminacin de un ABB.
Estructuras de Datos
Ricardo Ruiz Rodrguez
85
Ejercicio: En base al proceso descrito con anterioridad, inserte
en un ABB los nmeros: 9, 18, 10, 2, 6, 21, 8, 1, 7. Despus
elimine los nmeros 21, 18 y 9.
Ejercicio: Realice la implementacin de la eliminacin de
nodos en un ABB, considere los tres casos previstos:
1.Eliminacin de nodos hojas.
2.Eliminacin de nodos con un solo hijo.
3.Eliminacin de nodos con dos hijos (implemente el esquema
de substitucin del hijo ms a la derecha del subrbol
izquierdo).