Anda di halaman 1dari 19

Topic overview

Estructuras Jerquicas Y rboles Binarios De Bsqueda


Estructuras de datos: Referencia prctica con orientacin a objetos
Romn Martnez and Elda Quiroga. Mexico City: Cengage Learning, 2002. p[115]-136. COPYRIGHT 2002 Cengage Learning
Editores, S.A. de C.V.
Texto completo:
Pgina [115]

Captulo 8: Estructuras Jerquicas Y rboles Binarios De Bsqueda


OBJETIVOS Qu es una estructura jerrquica? Terminologa bsica en las estructuras jerrquicas o rboles Cmo se relaciona
el problema de la bsqueda con los rboles? Qu es un rbol Binario de Bsqueda (ABB)? Especificacin lgica del TDA
ABB Cmo se realiza la bsqueda en un ABB? Por qu es eficiente la bsqueda en un ABB? Cmo se realiza la insercin de
un elemento en un ABB? Cmo se realiza la eliminacin de un elemento en un ABB? Qu ventajas ofrece un ABB sobre el
algoritmo de la bsqueda binaria? Qu desventajas tiene un ABB? Qu aplicaciones tiene un ABB? Cmo se puede
representar fsicamente un ABB? De qu manera se implementan las operaciones y/o aplicaciones sobre rboles binarios? En
qu consisten los recorridos en un rbol binario? EJERCICIOS AUTOEVALUACIN

OBJETIVOS
Definir las caractersticas de las estructuras de datos jerrquicas.
Describir la terminologa de las estructuras de datos tipo rbol: nodo raz nodo hijo nodo padre ancestros descendientes
nodo hoja subrbol, altura y niveles.
Describir el diseo lgico del TDA rbol binario de bsqueda (ABB), incluyendo las operaciones de bsqueda, insercin y
eliminacin de un elemento.
Implantar el TDA ABB, comprendiendo el movimiento del apuntador en la ruta de bsqueda.
Describir la forma en que se realizan los recorridos sobre un rbol binario.
Distinguir las ventajas de aplicar la recursividad en la implementacin de rutinas relacionadas con rboles binarios.
Pgina 116 |

Qu es una estructura jerrquica?

La organizacin de los datos en una estructura en forma jerrquica o de niveles, es una nueva opcin para representar estructuras
de datos, comnmente denominada rboles (figura 8.1). Su caracterstica principal es que mantienen una relacin de uno a
muchos (1:n) entre sus elementos.

Figura 8.1. Estructura jerrquica o rbol.

Terminologa bsica en las estructuras jerrquicas o rboles


Nodo raz: es el primer elemento de un rbol binario; un rbol binario slo tiene un nodo raz.
Nodo padre: son los nodos que tienen al menos un hijo (derecho y/o izquierdo).
Hijo derecho: nodo que se encuentra al lado derecho de otro nodo.
Hijo izquierdo: nodo que est al lado izquierdo de otro nodo.
Nodo hoja: nodos que no tienen hijos. (Un nodo de un rbol binario puede tener ninguno, uno o dos hijos.)
Nodo hermano: nodos que tienen un mismo padre.
Ancestros: nodo padre de un nodo o el padre de algn nodo ancestro. (El nodo raz es un ancestro de todos los nodos del
rbol.)
Nodo descendiente: el hijo de un nodo o el hijo de otro descendiente de ese nodo. (Todos los nodos del rbol son
descendientes del nodo raz.)
Subrbol izquierdo: todos los descendientes por la izquierda de un nodo forman un subrbol izquierdo, cuya raz es el
hijo izquierdo de ese nodo.
Subrbol derecho: todos los descendientes por la derecha de un nodo forman un subrbol derecho, cuya raz es el hijo
derecho de ese nodo.
Nivel de un nodo: distancia desde la raz. La raz est en el nivel cero. Cantidad de nodos por los que se tiene que pasar
para llegar a un nodo. (El nmero mximo de nodos en el nivel n es 2n .)
Pgina 117 |

Figura 8.2. Ejemplo de los elementos de un rbol binario.

Cmo se relaciona el problema de la bsqueda con los rboles?


Si se recuerda, en el captulo anterior se concluy que la manera ms eficiente de realizar una bsqueda en una estructura lineal es
con el algoritmo de la bsqueda binaria aplicado en una tabla de memoria esttica. Sin embargo, esta estructura presentaba la
desventaja de no ser eficiente para la insercin y eliminacin de elementos. Por otro lado, una lista encadenada ordenada tena un
mejor comportamiento en las inserciones y las bajas de elementos, pero no en el algoritmo de la bsqueda binaria. Ante esta
disyuntiva, contar con las estructuras jerrquicas (rboles), representa una opcin para conjuntar las caractersticas positivas de
estas estructuras lineales. La propuesta es el TDA rbol Binario de Bsqueda, que se describe a continuacin.

Qu es un rbol Binario de Bsqueda (ABB)?


Un ABB es una estructura de datos que guarda informacin no repetida para administrar eficientemente la bsqueda de los
propios datos. Pertenece al conjunto de estructuras jerrquicas, restringiendo la relacin de uno a dos como mximo y
cumpliendo con un ordenamiento de tal forma que, para cada elemento del ABB, los elementos menores estarn a su izquierda y
los mayores a su derecha (figura 8.3).
Pgina 118 |

Figura 8.3. Ejemplos de rboles.

Especificacin lgica del TDA ABB


ELEMENTOS: los elementos de un ABB se identifican como nodos. Cada uno de ellos contiene un dato (simple o
estructurado) nico en el rbol.
ESTRUCTURA:un ABB posee una estructura jerrquica (a excepcin del rbol vaco). Slo hay un nodo raz; los dems forman
dos subr-boles disjuntos. Cada nodo, excepto el raz, tiene un nico padre y no tiene hijos o tiene uno o dos
hijos. El hijo izquierdo siempre tendr un valor menor y es la raz del subrbol izquierdo y el derecho siempre
tendr un valor mayor y es la raz del subrbol derecho.

Pgina 119 |

OPERACIONES
CREAR
UTILIDAD:
crea o inicializa un rbol.
ENTRADAS:
el espacio de memoria donde se crear el rbol.
SALIDAS:
el rbol inicializado.
PRECONDICIN: ninguna
POSTCONDICIN:el rbol est inicializado (sin elementos).
BUSCAR
UTILIDAD:
busca un elemento dentro del rbol ABB.
ENTRADAS:
el rbol ABB donde va a buscar y el elemento (valor) por localizar.
SALIDAS:
regresa falso si valor no se encuentra en el rbol o regresa verdadero si encontr valor en el rbol y un
apuntador Palmacena la posicin dentro del rbol donde est valor.
PRECONDICIN: existe el rbol ABB.
POSTCONDICIN:ninguna.
INSERTAR
UTILIDAD:
inserta un nuevo elemento dentro del rbol ABB.
ENTRADAS:
el rbol ABB donde va a insertar el elemento y el elemento nuevo.
SALIDAS:
el rbol tiene un nuevo elemento (nuevo) insertado como hoja en la posicin que le corresponda, segn su
valor.
PRECONDICIN: el rbol ABB existe y el elemento nuevo no est en l.
POSTCONDICIN:el rbol ABB contiene al elemento nuevo insertado como una hoja.
BORRAR
UTILIDAD:
elimina un elemento del rbol.
ENTRADAS:
el rbol ABB de donde se va a eliminar el elemento y el elemento (dato) a borrar.
SALIDAS:
regresa falso si dato no se encuentra en el rbol; regresa verdadero si encontr dato en el rbol y lo pudo

eliminar, en cuyo caso, regresa el rbol modificado.


PRECONDICIN: el rbol ABB existe y el elemento dato se encuentra en dicho rbol.
POSTCONDICIN:el rbol ABB contiene un elemento menos (dato).

Pgina 120 |

RECORRER
UTILIDAD:
ENTRADAS:
SALIDAS:

despliega los elementos almacenados en el rbol.


el rbol ABB a desplegar y el orden en que se desplegarn los elementos.
cada nodo en el rbol se procesa exactamente una vez. El orden en que se procesan los nodos depende
del valor de orden. Si orden es:
PREORDEN:
Cada nodo se procesa antes que cualquiera de los nodos existentes en sus subrboles.
INORDEN:
cada nodo se procesa exactamente despus de procesar todos los nodos de su subrbol izquierdo, pero
antes de procesar los de su subrbol derecho.
POSTORDEN:
Cada nodo es procesado despus de que se procesaron los nodos existentes en ambos subrboles.
PRECONDICIN: existe el rbol ABB.
POSTCONDICIN:ninguna.

Cmo se realiza la bsqueda en un ABB?


La idea bsica del algorimo de bsqueda consiste en comparar la informacin del nodo con la del valor buscado; si no son
iguales, el apuntador de bsqueda se mueve a la izquierda o a la derecha del valor buscado, segn sea menor o mayor,
comenzando por la raz y hasta que se encuentre o no el valor.
El algoritmo se puede describir con los siguientes pasos:
1. Coloque un apuntador auxiliar en la raz del rbol.
2. Mientras no se haya encontrado el valor que se busca y el apuntador auxiliar no est vaco (fuera del rbol):
Verifique si la informacin del nodo sealado por el apuntador au-xilar es mayor, menor o igual al nodo buscado.
- Si es mayor, mueva el apuntador auxiliar al nodo hijo derecho; si es menor, mueva el apuntador auxiliar al nodo hijo izquierdo.
Si son iguales, ha encontrado el nodo y el apuntador auxiliar lo seala (figura 8.4.).
Pgina 121 |

Figura 8.4. Movimiento de apuntadores para buscar el elemento 13.

Por qu es eficiente la bsqueda en un ABB?

El ABB es una consecuencia directa del algoritmo de bsqueda binaria sobre una estructura lineal y, por lo tanto, tiene todos sus
beneficios.Si un ABB tiene distribuidos sus elementos en forma balanceada, seobtendr el mayor beneficio, pues se haran las
mismas comparaciones que en una bsqueda binaria sobre un arreglo. El peor caso de una bsqueda en un ABB est
determinado por la altura del rbol y, por lo tanto, entre menor altura tenga el ABB, es decir, entre ms balanceado est, se
obtendrn mejores resultados.

Cmo se realiza la insercin de un elemento en un ABB?


Todo nuevo nodo se insertar como nodo hoja en el ABB, en el lugar que le corresponda segn el proceso de bsqueda (figura
8.5).

Figura 8.5. Insercin de un elemento en un ABB.

Pgina 122 |

El ejemplo anterior ilustra la manera en que se insertara el elemento 15 en un ABB; es decir, el algoritmo busca al nodo cantidato
a padre del nuevo valor y realiza la insercin correspondiente mediante los siguientes pasos:
1. Se crea un nuevo nodo por medio de un apuntador auxiliar 1. Se llena con la informacin que se va a insertar en el rbol y
se colocan sus apuntadores como nodo hoja.
2. Se coloca un apuntador auxiliar 2 en la raz del rbol y un apuntador auxiliar 3 en vaco. El apuntador auxiliar 3 siempre
sealar al nodo padre del nodo al que seala el apuntador auxiliar 2.
3. Mientras el apuntador auxiliar 2 no sea vaco (fuera del rbol) se realiza lo siguiente:
Se coloca el apuntador auxiliar 3 en el nodo que marca el apuntador auxiliar 2.
Mueva el apuntador auxiliar 2 al nodo hijo izquierdo si la informacin que se va a insertar es menor a la informacin
del nodo que seala el apuntador auxiliar 2; en caso contrario, debe moverse a la derecha (pues la informacin por
insertar es mayor).
Al salir del ciclo el apuntador auxiliar 2 sealar vaco, pero el apuntador auxiliar 3 estar en el nodo que ser el
padre del nuevo.
4. Verifique si el apuntador auxiliar 3 es vaco, en cuyo caso, el nuevo nodo ser el primero en el rbol y el apuntador raz
tendr que sealarlo.
Si el apuntador auxiliar 3 no es vaco, entonces estar sealando al padre del nuevo nodo. Se debe verificar si la informacin del
nuevo nodo es menor a la del marcado por el apuntador auxiliar 3, en cuyo caso deber encadenarse el nuevo nodo como un hijo
izquierdo del sealado por el apuntador auxiliar 3. Si la informacin no es menor, entonces ser mayor y tendr que encadenarse
como hijo derecho.

Cmo se realiza la eliminacin de un elemento en un ABB?

La accin de borrar un nodo puede enfrentarse con alguno de los siguientes casos:
1. El nodo que se va a borrar es una hoja. Puesto que no tiene hijos, su nodo padre apuntar ahora a vaco (figura 8.6).
2. El nodo por borrar tiene slo un hijo. En este caso, el padre del que se va a borrar puede apuntar directamente al nodo
hijo del que se eliminar (figura 8.7.)
Pgina 123 |

Figura 8.6. Eliminacin de un nodo hoja: se elimina el 8.

Figura 8.7. Eliminacin de un nodo con un hijo: se elimina el 21.


3. El nodo por borrar tiene dos hijos. Puesto que el padre del que se va a eliminar no puede heredar dos apuntadores, se
busca un valor sustituto del valor por borrar y el nodo no se borra fsicamente. Se puede escoger como sustituto al
predecesor del que se eliminar (el valor mayor de todos los valores menores; o bien, de los nodos del subrbol izquierdo
el de ms a la derecha), y se elimina fsicamente el nodo donde se encuentre (figura 8.8). Se puede asegurar que la baja
fsica del nodo sustituto cae en alguno de los dos primeros casos. De igual manera, se puede considerar al sucesor como
valor sustituto.

Pgina 124 |

Figura B.B. Eliminacin de un nodo con dos hijos: se elimina el 12.


El algoritmo de esta operacin est compuesto de dos partes. La primera se encarga de localizar el nodo por borrar y la segunda
borra el nodo encontrado.
Primera parte (localizar el nodo por borrar)
1. Se coloca un apuntador auxiliar 1 en la raz del rbol y un apuntador auxiliar 2 en vaco. El apuntador auxiliar 2 siempre
sealar al nodo padre del que seala el apuntador auxiliar 1.
2. Mientras no se haya encontrado el nodo por borrar:
Se verifica si la informacin del nodo sealado por el apuntador auxiliar 1 es la que se desea borrar, en caso de que no sea:
a) se coloca el apuntador auxiliar 2 en el nodo que seala el apuntador auxiliar 1 y b) se mueve el apuntador auxiliar I al
nodo hijo izquierdo si la informacin que se va a borrar es menor a la informacin del nodo que seala el apuntador auxiliar
1; en caso contrario, debe moverse a la derecha.
Al salir del ciclo, el apuntador auxiliar 1 estar sealando al nodo por borrar y el apuntador auxiliar 2 al nodo padre.
Segunda parte (eliminar el nodo correspondiente)
1. Se coloca un apuntador temporal en el nodo que debe borrar.
2. Se verifica si el nodo por borrar es hoja o tiene slo un hijo, en cuyo caso se desencadenar del rbol para darlo de baja.
Nodo hoja: Si el nodo apuntado por el auxiliar 1 no tiene hijo izquierdo ni derecho, debe modificarse el apuntador que lo
conecta con su padre (a travs del auxiliar 2) de tal forma que apunte hacia vaco. Nodo con un hijo derecho: si el nodo
apuntado por el auxiliar 1 no
Pgina 125 |

tiene hijo izquierdo, pero s derecho, se modifica el apuntador que lo conecta con su padre (a travs del auxiliar 2) de tal
forma que seale al hijo derecho.
Nodo con un hijo izquierdo: si el nodo apuntado por el auxiliar 1 no tiene hijo derecho, pero s hijo izquierdo, debe
modificarse el apuntador que lo conecta con su padre (a travs del auxiliar 2) de tal forma que seale al nodo hijo
izquierdo.
Nodo con dos hijos: si el nodo tiene dos hijos se proceder a localizar su sustituto buscando a su predecesor de la
siguiente forma:
Se coloca el apuntador temporal en el hijo izquierdo del nodo sealado por el apuntador auxiliar 1.
Se mueve el apuntador temporal hacia la derecha lo ms posible, es decir, justo en el nodo antes de que el
movimiento a la derecha lo saque del rbol. El nodo al que se llegue ser el nodo sustituto y se puede asegurar que
es nodo hoja o que tiene slo un hijo izquierdo.

Se copia la informacin del nodo sustituto en el marcado por el apuntador auxiliar 1.


Se desencadena el nodo sealado por el apuntador temporal de la misma forma en que se hace para un nodo hoja o
uno con hijo izquierdo. En este caso, para el movimiento de apuntadores, se tendr que evaluar si el nodo marcado
por el apuntador temporal es la raz del subrbol izquierdo del nodo sealado por el apuntador auxiliar 1 o es de un
nivel inferior.
3. 3. Se libera el nodo sealado por el apuntador temporal.

Qu ventajas ofrece un ABB sobre el algoritmo de la bsqueda binaria?


Aunque la eficiencia de una bsqueda en un ABB es igual a la del algoritmo de la bsqueda binaria en una estructura lineal, el
ABB ofrece adicionalmente la ventaja de su representacin por medio de ligas.
La mejor representacin para un ABB ser utilizando memoria dinmica obteniendo as sus beneficios, pues el algoritmo de
bsqueda binaria pierde su eficiencia si se trata de aplicar en una lista encadenada ordenada.
Pgina 126 |

Qu desventajas tiene un ABB?


La principal desventaja de un ABB es la forma en que se realizan las inserciones y eliminaciones de elementos. El orden de
insercin y eliminacin determina la forma en que se balancea el rbol y, por lo tanto, repercute en las bsquedas posteriores. En
el peor de los casos, un ABB puede degenerar en una lista sobre la que se aplicar una bsqueda secuencia!. Se puede hacer la
prueba insertando en el rbol vaco una secuencia ordenada de datos y comprobando que el rbol que se forma es uno en que
slo se encadenan los nodos por medio de un slo apuntador y se degenera en una lista. Obviamente, en este caso el algoritmo
de bsqueda en el ABB se comportar como una bsqueda secuencial. La forma de atacar este problema se analizar en
captulos posteriores al conocer otras estructuras.

Qu aplicaciones tiene un ABB?


Un ABB ser til en cualquier aplicacin en la que se requiera administrar un grupo ordenado de datos en memoria principal con
el objetivo bsico de buscar de manera eficiente cualquier dato. Se recomienda que la aplicacin tenga al grupo de datos bien
definido desde un principio y que no requiera de muchas altas y bajas para mantener el rbol lo ms balanceado posible.

Cmo se puede representar fsicamente un ABB?


La forma de representar un ABB est obligada a utilizar ligas, ya sea en memoria dinmica (preferentemente) o esttica.
La base de esta representacin estar en un nodo que contenga la informacin y los apuntadores a los subrboles izquierdo y
derecho. El ABB estar controlado mediante un apuntador principal al nodo raz del rbol (figura 8.9).

Figura 8.9. Representacin de un ABB en memoria, con nodos que contienenapuntadores a sus hijos izquierdos y derechos. El
control del rbol est en el apuntador principal raz.

Pgina 127 |

Declaracin de tipos para un ABB en lenguaje C:


typedef struct nodo
{tipoinfo info; struct nodo *izq, *der; } tiponodo;
typedef tiponodo *tipoarboI;
Declaracin de tipos para un ABB en lenguaje C++:
class NodoArbol
{public:
tipoinfo info;
Nodorbol *izq, *der;
NodoArbolO {izq=der=NULL;}
NodoArbol(tipoinfo dato)
{info=dato; izq=der=NULL;}
};
class ABB
{prvate:
NodoArbol *raiz;
public:
ABB() {raiz=NULL;}
~ABB() //se requiere un destructor

//otros metodos
};

De qu manera se implementan las operaciones y/o aplicaciones sobre


rboles binarios?
La implementacin de las operaciones sobre rboles binarios requiere observar previamente qu tipo de solucin conviene.
Cuando lo que se quiere programar requiere visitar slo un camino lineal dentro del rbol, una solucin iterativa que maneje
apuntadores ser suficiente; pero cuando se deba implementar una operacin en la que se necesite visitar todos los nodos del
rbol, ser conveniente hacer uso de la re-cursividad como estrategia de solucin. La recursividad, en este caso, se presta como
estrategia, pues los rboles binarios son una estructura que se puede definir recursivamente, hablando de los subrboles izquierdo
y derecho.
Pgina 128 |

Algoritmo iterativo de la bsqueda


NodoABB *p=raiz;
while (p!=NULL)
{ if(p->info == valor)
return(p);
else
p=(p->info > valor? p->izq: p->der):
}
return(NULL);
Algoritmo iterativo de la insercin
NodoABB *NuevoNodo = new Nodo Arbol (valor);
NodoABB *actml = raz, *anterior = NULL;
while (actual !=NULL)
{anterior=actual;
actual=(actual->info>valor? actual->izq: actual->der); }
if(anterior==NULL)
raiz=NuevoNodo;
else
if(anterior->info > valor)
anterior->izq=NuevoNodo;

else
anterior->der=NuevoNodo;
Rutina recursiva para desplegar la informacin de un rbol binario
void despliega ( NodoABB* raz)

Pgina 129 |

En qu consisten los recorridos en un rbol binario?


La accin de recorrer una estructura de datos es muy importante, pues permite hacer algo en todos los elementos de la estructura
(por ejemplo, desplegarlos en pantalla). Esto es relativamente simple en una estructura lineal, pues slo se recorre desde el
principio hasta el final. Pero ahora, en una estructura jerrquica como los rboles binarios, hay diferentes formas de realizar estos
recorridos.
Los algoritmos de los recorridos de un rbol binario se pueden plantear recursivamente de la siguiente forma (se entiende que
visitar esla accin por aplicar al nodo durante el recorrido). Asimismo, se observa que un recorrido se aplica sobre cualquier
rbol binario, sin importar si es o no de bsqueda (figura 8.10).
Preorden: til para reconstruir un ABB
1. Visite el nodo raz del rbol.
2. Recorra en preorden el subrbol izquierdo del nodo raz.
3. Recorra en preorden el subrbol derecho del nodo raz.
Inorden: til para desplegar en orden la informacin de un ABB
1. Recorra en inorden el subrbol izquierdo del nodo raz.
2. Visite el nodo raz del rbol.
3. Recorra en inorden el subrbol derecho del nodo raz.
Postorden: til para implementar el destructor de un rbol binario (eliminacin de todos los nodos)
1. Recorra en postorden el subrbol izquierdo del nodo raz.

2. Recorra en postorden el subrbol derecho del nodo raz.


3. Visite el nodo raz del rbol.
Adems de estos recorridos tradicionales, se tienen los recorridos conversos, en los que el orden de recorrido se invierte a
derecha-izquierda, en vez de izquierda-derecha.
Finalmente, existe un recorrido llamado nivel por nivel, en el que los nodos del rbol se visitan por niveles a partir del 0, y de
izquierda a derecha. Este algoritmo puede plantearse iterativamente, utilizando una fila de la siguiente manera:
1. Inserte el apuntador al nodo raz a una fila.
2. Mientras la fila no se vace:
Saque el apuntador de la fila y procese el nodo sealado.
Inserte en la fila los apuntadores de los hijos del nodo procesado (si stos existen).
Pgina 130 |

Ejemplo

Figura 8.10.

EJERCICIOS
1. Dado el siguiente rbol binario de bsqueda codificado (cada smbolo de un nodo corresponde a un valor numrico),
responda cada uno de los siguientes incisos:

Figura 8.10.
Qu smbolo representa el valor numrico ms grande en el rbol?

Qu smbolo representa el valor numrico ms pequeo en el rbol?


Qu smbolo representa el valor medio en el rbol?
Cules son los ancestros del nodo que contiene el smbolo ??
Cuntas comparaciones se requerirn para encontrar el smbolo & en el rbol?
Cuntos nodos como mximo podran existir en el rbol si su altura fuera igual a 4?
Cul es el smbolo cuyo valor numrico asociado es inmediatamente mayor al valor numrico del smbolo = ?
Si el smbolo % representa la suma de los valores asociados a los smbolos $ y /, muestre con un dibujo cmo
quedara el rbol al insertar el smbolo %.
2. A

Pgina 131 |

continuacin se muestra una serie de casos que debern resolverse implementando una funcin libre en C++, y trabajando
iterativamente (no recursivamente) en el nivel fsico del rbol binario de bsqueda. Considere, para todos los casos, que el
mdulo recibir el rbol a travs de un apuntador a su nodo raz.
Realice un mdulo que sirva para encontrar el nmero de nivel en que se encuentra un dato en el ABB.
Realice un mdulo que, dado un elemento del rbol, obtenga el elemento que es su abuelo.
Realice un mdulo que, dado un elemento del rbol, despliegue los elementos que son sus ancestros.
Realice un mdulo que, dados los valores de dos elementos de un ABB, encuentre cules son los nodos ancestros
comunes a ambos. Los ancestros se debern desplegar del ms antiguo al ms joven.
Realice un mdulo que sirva para desplegar los valores de los no-dos primos del nodo, cuyo valor se especificar
como entrada al mdulo.
3. Se tiene el siguiente ABB almacenado en un arreglo de memoria esttica. Los nodos disponibles se manejan como una pila
en una lista doblemente encadenada a travs de los campos izq y der. Tome en cuenta que 0 = NULL y que el apuntador
disponible seala el tope de la pila.

Muestre a travs de un esquema el rbol que est representado en este arreglo.


Para cada uno de los siguientes puntos, muestre el estado del arreglo y de los apuntadores, despus de ejecutar las
operaciones que se indican. Adems, muestre el esquema del rbol correspondiente. Para todos los puntos tome
siempre las condiciones iniciales (originales) del rbol. Si es necesario, emplee la estrategia del menor de los
mayores al dar de baja un nodo.
i) Inserte en el rbol el elemento Sonora.
ii) Elimine del rbol original el elemento Zacatecas.
iii) Elimine del rbol original el elemento que se encuentra en la raz.
Pgina 132 |

Nota: los siguientes problemas se pueden aplicar en cualquier rbol binario, sin importar si es de bsqueda o no.
4. Escriba una funcin recursiva que sirva para obtener la altura de un rbol binario. La altura de un rbol binario se define
como la distancia entre el nodo raz y el nodo hoja ms alejado de la raz, o bien, la cantidad de niveles que tiene el rbol.

5.

6.

7.
8.

9.

La funcin recibir como entrada el apuntador al nodo raz del rbol.


Escriba una funcin que sirva para obtener la anchura de un rbol binario, que se define como la cantidad mxima de
nodos que se encuentran en algn nivel del rbol. La funcin recibir como entrada el apuntador al nodo raz del rbol.
Para este caso, se recomienda apoyarse en la prctica del recorrido nivel por nivel.
Modifique la implementacin del recorrido nivel por nivel, para desplegar los elementos de un rbol binario, de tal forma
que para cada nivel del rbol se muestren los elementos que hay en el nivel, de izquierda a derecha. La funcin recibir
como entrada el apuntador al nodo raz del rbol.
Realice la implementacin de una funcin que sirva para desplegar en pantalla la informacin que guardan las hojas de un
rbol, de izquierda a derecha. Describa tambin la rutina equivalente que lo haga de derecha a izquierda.
Para cada uno de los siguientes incisos, dados los recorridos, construya el rbol binario correspondiente:
a) Inorden: ? / X + % * # $ & 3 @
Postorden: ? / + X % * & 3 $ @ #
b) Preorden:3 1 94 7
Postorden:7 4 9 1 3
Qu tipo de recorrido sobre un rbol binario realiza la siguiente funcin?

Nota: suponga que la clase pila est parametrizada y que se imple-menta segn las necesidades de esta aplicacin.
Pgina 133 |

vote recorrido (NodoArbol *Raiz)


{ Pla<Nodorbol*>P
Nodo Arbol* aux m Raz;
do
{ while (aux != NUIL)
{cout << aux -> info; }
Pila.Meten(aux);
aux = aux >izq; }
if(Piia.Sacar(aux))
aux = aux->der;
} while (aux != NULL) // ( / Pila.Vacia());
}

AUTOEVALUACIN
Para las preguntas 1, 2 y 3 utilice el rbol binario de bsqueda codificado que se muestra en la siguiente figura:

1. Si los smbolos representan la codificacin de los valores del 1 al 20,cul es el valor asociado al smbolo +?
a) 5 b) 8 c) 9 d) 13 e) 15
2. Si se quisiera dar de baja la raz del rbol, cul de los siguientes smbolos es candidato para sustituirlo?
a) R b)- c) 0 d) T e) Z
Pgina 134 |

3. Si el smbolo representa un valor menor que todos los valores del rbol, en qu posicin se insertara?
A la izquierda del nodo que contiene el smbolo L.
A la derecha del nodo que contiene al smbolo O.
A la izquierda del nodo que contiene al smbolo Z.
A la izquierda del nodo que contiene al smbolo -.
A la derecha del nodo que contiene al smbolo L.
4. La siguiente figura muestra la representacin de un rbol binario de bsqueda en memoria esttica. Cul es el valor del
apuntador RAZ despus de eliminar el valor TIGRES del rbol?
Suponga que 0 = NULL y que la lista de disponibles se maneja como pila a travs del campo izq.

a) 5 b) 6 c) l d) 0 e) 2
5. Los recorridos conversos son una vanante de los recorridos tradicionales sobre un rbol binario. Se basan en la misma idea
de losrecorridos tradicionales, slo que en vez de visitar primero el subr-bol izquierdo y luego el derecho, se visita
primero el subrbol derecho y despus el izquierdo.

Para el siguiente rbol binario, indique cul de los siguientes recorridos es correcto:

Preorden converso: A $ # + * R 3 @ X 9
Postorden: + # $ R X 9 @ 3 * A
Inorden converso: $ + # A R * X @ 9 3
Todos los anteriores
Ninguno de los anteriores
Pgina 135 |

6. Qu desplegar en pantalla la ejecucin del mdulo misterio, si sele enva como entrada el rbol que se muestra?
7.

Figura 8.10.
U*ZM8PRE+C 5
5C +ERP8MZ*U
C 5+REM8P*ZU
UZ*P8MER+5C
U*MR+C 5Z8PE
8. Cul es el mdulo recursivo para contar la cantidad de valoresnegativos que hay en un rbol binario?
int Cuenta (Nodorbol *Raiz);
{ if(Raiz==NULL)
return 0;
else

if(Raiz->info <0)
return I;
else
return Cuenta(Raiz->izq)+Cuenta(Raiz->der);
}
Pgina 136 |

int Cuenta (Nodorbol *Raiz);


{ if(Raiz==NULL)
return 0;
else
if(Raiz->info>0)
return 1;
else
return Cuenta(Raiz->izq)+Cuenta(Raiz_der);
}
int Cuenta (Nodorbol *Rak);
{ if(Raiz==NULL)
return 0;
else
if (Raiz->info > 0)
return(J+Cuenta(Raiz->izq)+Cuenta(Raiz->der)};
else
return 0;
}
int Cuenta (NodoArbol *Rak);
{ if(Raiz==NULL)
return 0;
else
if (Raiz->info > 0)
return(Cuenta(Raiz->izq)+Cuenta(Raiz->der)};
else
return(1 + Cuenta(Raiz->izq)+Cuenta(Raiz->der));
}
Ninguno de los anteriores.
Cita de fuente (MLA 7.a edicin)
"Estructuras Jerquicas Y rboles Binarios De Bsqueda." Estructuras de datos: Referencia prctica con orientacin a
objetos. Romn Martnez and Elda Quiroga. Mexico City: Cengage Learning, 2002. [115]-136. Gale Virtual Reference
Library. Web. 5 Sept. 2014.
Document URL
http://go.galegroup.com/ps/i.do?
id=GALE%7CCX3003600014&v=2.1&u=unad&it=r&p=GVRL&sw=w&asid=a29a6b0c9d7fe84660bf21581cd87b8e
Nmero de documento de Gale: GALE|CX3003600014

Anda mungkin juga menyukai