Está en la página 1de 10

rbol Binario

De Bsqueda
Estructura de Datos
Integrantes: Delgado Gutirrez Mara Isabel Herrera Segura Vanessa Rosario Mndez Vizueta Frank Caleb Villalva Morales Ballardo Ezequiel

DEFINICIN. Un rbol de bsqueda binaria (ABB) es un rbol binario que almacena en cada nodo una llave; Y que para cada nodo se definen dos condiciones mutuamente excluyentes, de forma que las claves de los nodos del subrbol izquierdo cumplen una de ellas, y las del subrbol derecho la otra.

Dos ABB con los mismos elementos

PROPIEDADES Cada nodo tiene un valor Se define un orden total sobre esos valores El subrbol izquierdo de un nodo contiene valores menores o iguales que el valor de dicho nodo. El subrbol derecho de un nodo contiene valores mayores o iguales que el valor de dicho nodo. SUCESOR Y PREDECESOR El predecesor de un elemento X es el mayor elemento de todos los menores que X dentro del rbol. El sucesor de un elemento X es el menor elemento de todos los mayores que X dentro del rbol. En la figura, el predecesor de 14 es 8, el predecesor de 22 es 20, el de 20 es 19; 1 no tiene predecesor. El sucesor de 1 es 8, el sucesor de 20 es 22, el de 14 es 16; 50 no tiene sucesor.

Operaciones en ABB
BSQUEDA DE ELEMENTO Partiendo siempre del nodo raz, el modo de buscar un elemento se define de forma recursiva. Si el rbol est vaco, terminamos la bsqueda: el elemento no est en el rbol. Si el valor del nodo raz es igual que el del elemento que buscamos, terminamos la bsqueda con xito. Si el valor del nodo raz es mayor que el elemento que buscamos, continuaremos la bsqueda en el rbol izquierdo. Si el valor del nodo raz es menor que el elemento que buscamos, continuaremos la bsqueda en el rbol derecho. El valor de retorno de una funcin de bsqueda en un ABB puede ser un puntero al nodo encontrado, o NULL, si no se ha encontrado.

INSERCIN DE UN ELEMENTO. Para insertar un elemento nos basamos en el algoritmo de bsqueda. Si el elemento est en el rbol no lo insertaremos. Si no lo est, lo insertaremos a continuacin del ltimo nodo visitado. Necesitamos un puntero auxiliar para conservar una referencia al padre del nodo raz actual. El valor inicial para ese puntero es NULL. Padre = NULL nodo = Raz Bucle: mientras actual no sea un rbol vaco o hasta que se encuentre el elemento. Si el valor del nodo raz es mayor que el elemento que buscamos, continuaremos la bsqueda en el rbol izquierdo: Padre=nodo, nodo=nodo->izquierdo.Si el valor del nodo raz es menor que el elemento que buscamos, continuaremos la bsqueda en el rbol derecho: Padre=nodo, nodo=nodo->derecho.

ELIMINACIN DE UN ELEMENTO. Para borrar un elemento tambin nos basamos en el algoritmo de bsqueda. Si el elemento no est en el rbol no lo podremos borrar. Si est, hay dos casos posibles: Se trata de un nodo hoja: en ese caso lo borraremos directamente. Se trata de un nodo rama: en ese caso no podemos eliminarlo, puesto que perderamos todos los elementos del rbol de que el nodo actual es padre. En su lugar buscamos el nodo ms a la izquierda del subrbol derecho, o el ms a la derecha del subrbol izquierdo e intercambiamos sus valores. A continuacin eliminamos el nodo hoja. Necesitamos un puntero auxiliar para conservar una referencia al padre del nodo raz actual. El valor inicial para ese puntero es NULL. BORRAR UN NODO HOJA En el rbol de ejemplo, borrar el nodo 3. Localizamos el nodo a borrar, al tiempo que mantenemos un puntero a 'Padre'. Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a NULL. Borramos el 'nodo'.

Borrar un nodo hoja BORRAR UN NODO RAMA CON INTERCAMBIO DE UN NODO HOJA.
Borrar el nodo 4. Localizamos el nodo a borrar ('raz'). Buscamos el nodo ms a la derecha del rbol izquierdo de 'raz', en este caso el 3, al tiempo que mantenemos un puntero a 'Padre' a 'nodo'. Intercambiamos los elementos 3 y 4. Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a NULL.

Borramos el 'nodo'.

Borrar un nodo rama con intercambio de un nodo rama. En ste borraremos el elemento 6.

1.-Localizamos el nodo a borrar ('raz'). 2.-Buscamos el nodo ms a la izquierda del rbol derecho de 'raz', en este caso el 12, ya que el rbol derecho no tiene nodos a su izquierda, si optamos por la rama izquierda, estaremos en un caso anlogo. Al mismo tiempo que mantenemos un puntero a 'Padre' a 'nodo'. 3.-Intercambiamos los elementos 6 y 12. 4.-Ahora tenemos que repetir el bucle para el nodo 6 de nuevo, ya que no podemos eliminarlo.

rbol binario de bsqueda

Borrar con intercambio de nodo rama (1)

6.-Localizamos de nuevo el nodo a borrar ('raz'). 7.-Buscamos el nodo ms a la izquierda del rbol derecho de 'raz', en este caso el 16, al mismo tiempo que mantenemos un puntero a 'Padre' a 'nodo'. 8.-Intercambiamos los elementos 6 y 16. 9.-Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a NULL. Borramos el 'nodo'.
MOVIMIENTOS A TRAVS DEL RBOL No hay mucho que contar. Nuestra estructura se referenciar siempre mediante un puntero al nodo Raz, este puntero no debe perderse nunca. Para movernos a travs del rbol usaremos punteros auxiliares, de modo que desde cualquier puntero los movimientos posibles sern: moverse al nodo raz de la rama izquierda, moverse al nodo raz de la rama derecha o moverse al nodo Raz del rbol.

Borrar con intercambio de nodo rama (2)

Este modo de actuar asegura que el rbol sigue siendo ABB .

RBOLES DEGENERADOS Los rboles binarios de bsqueda tienen un gran inconveniente. Por ejemplo, supongamos que creamos un ABB a partir de una lista de valores ordenada: 2, 4, 5, 8, 9, 12 Difcilmente podremos llamar a la estructura resultante un rbol:

Esto es lo que llamamos un rbol binario de bsqueda degenerado, y en el siguiente captulo veremos una nueva estructura, el rbol AVL, que resuelve este problema, generando rboles de bsqueda equilibrados.

También podría gustarte