You are on page 1of 87

FACULTAD DE INGENIERA

ESCUELA DE INGENIERA EN SISTEMAS Y COMPUTACIN


ESTRUCTURA DE DATOS Pamela Vsquez Costales

UNIDAD III CAPTULO 9 ESTRUCTURAS JERRQUICAS Y RBOLES BINARIOS DE BSQUEDA

ESTRUCTURAS JERRQUICAS Y RBOLES BINARIOS DE BSQUEDA


Objetivos
O Definir las caractersticas de las

estructuras de datos jerrquicas.

Objetivos
O Describir la terminologa de las

estructuras de datos tipo rbol: nodo raz, nodo hijo, nodo padre, ancestros, descendientes, nodo hoja, sub-rbol, altura y niveles. O Describir el diseo lgico del TDA rbol binario de bsqueda (ABB), incluyendo las operaciones de bsqueda, insercin y eliminacin de un elemento.

Objetivos
O Implantar el TDA ABB,

comprendiendo el movimiento del apuntador en la ruta de bsqueda. O Describir la forma en que se realizan los recorridos sobre un rbol binario. O Distinguir las ventajas de aplicar la recursividad en la implementacin de rutinas relacionadas con rboles binarios.

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. Su caracterstica principal es que mantienen una relacin de uno a muchos (1:n) entre sus elementos.

Estructura Jerrquica o rbol

Terminologa bsica en las estructuras jerrquicas o rboles


O Nodo raz: es el primer elemento de

un rbol binario; un rbol binario slo tiene un nodo raz. O Nodo padre: son los nodos que tienen al menos un hijo (derecho y/o izquierdo). O Hijo derecho: nodo que se encuentra al lado derecho de otro nodo.

O Hijo izquierdo: nodo que est al

lado izquierdo de otro nodo. O Nodo hoja: nodos que no tienen hijos. (Un nodo de un rbol binario puede tener ninguno, uno o dos hijos.) O Nodo hermano: nodos que tienen un mismo padre. O 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.)

O 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.) O Subrbol izquierdo: todos los descendientes por la izquierda de un nodo forman un subrbol izquierdo, cuya raz es el hijo izquierdo de ese nodo.

O Subrbol derecho: todos los

descendientes por la derecha de un nodo forman un subrbol derecho, cuya raz es el hijo derecho de ese nodo. O Nivel de un nodo: distancia desde la miz. 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.)

O Subrbol derecho: todos los

descendientes por la derecha de un nodo forman un subrbol derecho, cuya raz es el hijo derecho de ese nodo. O Nivel de un nodo: distancia desde la miz. 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.)

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 como indica la siguiente figura:

Ejemplo de rboles

Especificacin lgica del TDA ABB

Cmo se realiza la bsqueda en un ABB? La idea bsica del algoritmo 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):

O Verifique si la informacin del nodo sealado

por el apuntador auxiliar es mayor, menor o igual al nodo buscado. O 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 la siguiente figura:

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, se obtendr 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 se indica en la figura:

Insercin de un elemento en un ABB:

El ejemplo anterior ilustra la manera en que se insertara el elemento 15 en un ABB; es decir, el algoritmo busca al nodo candidato 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 no-do 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:

O Se coloca el apuntador auxiliar 3 en el

nodo que marca el apuntador auxiliar 2. O 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).

O 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. Eliminacin de un nodo hoja: se elimina el 8.

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. 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 como indica la siguiente figura:

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. 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:

O 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 1 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.

O 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 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:

O Se coloca el apuntador temporal en el

hijo izquierdo del nodo sealado por el apuntador auxiliar1. O 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.

O Se copia la informacin del nodo

sustituto en el marcado por el apuntador auxiliar1. O 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. 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.

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 secuencial. 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.

Qu 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 como indica la figura:

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

Declaracin de tipos para un ABB en lenguaje C: typedef struct nodo { tipoinfo info; struct nodo *izq, *der; } tiponodo; typedef tiponodo*tipoarbol;

Declaracin de tipos para un ABB en lenguaje C++: class NodoArbol {public: tipoinfo info; NodoArbol *izq, *der; NodoArbol() {izq=der=NULL;} NodoArbol(tipoinfo dato) {info=dato; izq=der=NULL; };

Declaracin de tipos para un ABB en lenguaje C++: class ABB {private: NodoArbol *raiz; public: ABB() {raiz=NULL;} ~ABB() //se requiere un destructor //otros mtodos... };

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 recursividad 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.

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 *actual = raiz, *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* raiz) { if(raiz!=NULL) { cout Raiz->info; despliega( Raiz->izq ); despliega Raiz->der); } }

cout Raiz->info; despliega( Raiz->izq ); despliega Raiz->der); El orden de estas instrucciones determina el tipo de recorrido en el rbol

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 simple en una estructura lineal, pues slo se recorre desde el principio hasta el final. Pero 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 recesivamente de la siguiente forma (se entiende que "visitar" es la 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 como indica la figura:

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 rboll 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:

O Saque el apuntador de la fila y

procese el nodo sealado. O Inserte en la fila los apuntadores de los hijos del nodo procesado (si stos existen).

Ejemplo:

EJERCICIOS CAPTULO VIII 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:

a) Qu smbolo representa el valor numrico b) c) d)

e)

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? g) g) Cul es el smbolo cuyo valor numrico asociado es inmediata mente mayor al valor numrico del smbolo = ? h) h) Si el embolo % representa la suma de los valores asociados a los smbolos $ y /, muestre con un dibujo cmo quedara el rbol al insertar el smbolo %.
f)

2. Para cada uno de los siguientes incisos, dados los recorridos, construya el rbol binario correspondiente:

3. Qu tipo de recorrido sobre un rbol binario realiza la siguiente funcin? Nota: suponga que la clase pila est parametrizada y que se implementa segn las necesidades de esta aplicacin.

You might also like