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 |
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.
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
Pgina 120 |
RECORRER
UTILIDAD:
ENTRADAS:
SALIDAS:
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.
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.
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 |
Pgina 124 |
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.
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 |
//otros metodos
};
else
anterior->der=NuevoNodo;
Rutina recursiva para desplegar la informacin de un rbol binario
void despliega ( NodoABB* raz)
Pgina 129 |
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?
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.
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.
Nota: suponga que la clase pila est parametrizada y que se imple-menta segn las necesidades de esta aplicacin.
Pgina 133 |
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 |