Anda di halaman 1dari 4

rbol binario de bsqueda

Un rbol binario de bsqueda es aquel que es:


- Una estructura vaca o
- Un elemento o clave de informacin (nodo) ms un nmero finito -a lo sumo dos- de
estructuras tipo rbol, disjuntos, llamados subrboles y adems cumplen lo siguiente:
* Todas las claves del subrbol izquierdo al nodo son menores que la clave del nodo.
* Todas las claves del subrbol derecho al nodo son mayores que la clave del nodo.
* Ambos subrboles son rboles binarios de bsqueda.
rbol binario de bsqueda.
Para cada nodo de un rbol binario de bsqueda debe cumplirse la propiedad:
Las claves de los nodos del subrbol izquierdo deben ser menores que la clave de la raz.
Las claves de los nodos del subrbol derecho deben ser mayores que la clave de la raz

se gener insertando las claves en orden de llegada:


2, 1, 4, 3, 5 (o bien: 2, 4, 1, 5, 3)

Operaciones bsicas sobre rboles binarios de bsqueda

- Bsqueda

Si el rbol no es de bsqueda, es necesario emplear uno de los recorridos anteriores sobre el


rbol para localizarlo. El resultado es idntico al de una bsqueda secuencial.

Aprovechando las propiedades del rbol de bsqueda se puede acelerar la localizacin.


Simplemente hay que descender a lo largo del rbol a izquierda o derecha dependiendo del
elemento que se busca.

boolean buscar(tarbol *a, int elem)


{
if (a == NULL) return FALSE;
else if (a->clave < elem) return buscar(a->der, elem);
else if (a->clave > elem) return buscar(a->izq, elem);
else return TRUE;
}

- Insercin

La insercin tampoco es complicada. Es ms, resulta practicamente idntica a la bsqueda.


Cuando se llega a un rbol vaco se crea el nodo en el puntero que se pasa como parmetro
por referencia, de esta manera los nuevos enlaces mantienen la coherencia. Si el elemento a
insertar ya existe entonces no se hace nada.

void insertar(tarbol **a, int elem)


{
if (*a == NULL) {
*a = (arbol *) malloc(sizeof(arbol));
(*a)->clave = elem;
(*a)->izq = (*a)->der = NULL;
}
else if ((*a)->clave < elem) insertar(&(*a)->der, elem);

else if ((*a)->clave > elem) insertar(&(*a)->izq, elem);


}

- Borrado

La operacin de borrado si resulta ser algo ms complicada. Se recuerda que el rbol debe
seguir siendo de bsqueda tras el borrado. Pueden darse tres casos, una vez encontrado el
nodo a borrar:
1) El nodo no tiene descendientes. Simplemente se borra.
2) El nodo tiene al menos un descendiente por una sola rama. Se borra dicho nodo, y su
primer descendiente se asigna como hijo del padre del nodo borrado. Ejemplo: en el rbol
de la figura 5 se borra el nodo cuya clave es -1. El rbol resultante es:

El nodo tiene al menos un descendiente por cada rama. Al borrar dicho nodo es necesario
mantener la coherencia de los enlaces, adems de seguir manteniendo la estructura como un
rbol binario de bsqueda. La solucin consiste en sustituir la informacin del nodo que se
borra por el de una de las hojas, y borrar a continuacin dicha hoja. Puede ser cualquier
hoja? No, debe ser la que contenga una de estas dos claves:
la mayor de las claves menores al nodo que se borra. Suponer que se quiere borrar el
nodo 4 del rbol de la figura 5. Se sustituir la clave 4 por la clave 2.
la menor de las claves mayores al nodo que se borra. Suponer que se quiere borrar el
nodo 4 del rbol de la figura 5. Se sustituir la clave 4 por la clave 5.
El algoritmo de borrado que se implementa a continuacin realiza la sustitucin por la
mayor de las claves menores, (aunque se puede escoger la otra opcin sin prdida de
generalidad). Para lograr esto es necesario descender primero a la izquierda del nodo que se

va a borrar, y despus avanzar siempre a la derecha hasta encontrar un nodo hoja. A


continuacin se muestra grficamente el proceso de borrar el nodo de clave 4:

https://sistemas.uniandes.edu.co/~isis1106/dokuwiki/lib/exe/fetch.php?media=tutoriales:gol
d3_documento.pdf

Anda mungkin juga menyukai