1. Estructuras de Datos y
Algoritmos
Franco Guamán Bastidas
Universidad Técnica Particular de Loja
Departamento de Ciencias de la Computación y Electrónica
Sección Departamental de Inteligencia Artificial
ÁRBOL BINARIO DE BÚSQUEDA
2. Contenidos
Árboles Binarios de Búsqueda
Definición
Operaciones
Componente Nodo
Inserción de un nuevo elemento
Eliminar un elemento
Recorridos
Estructuras de Datos y Algoritmos - Franco Guamán 2
3. Definición
• Los elementos almacenados en el subárbol izquierdo de cualquier
nodo x, son menores que el elemento almacenado en el nodo x.
• Los elementos almacenados en el subárbol derecho de x son
mayores que el elemento almacenado en el nodo x.
Estructuras de Datos y Algoritmos - Franco Guamán 3
4. Definición
• Cada nodo del árbol esta compuesto por dos partes: una
parte informativa (pueden ser datos compuestos), la cual
deberá necesariamente contar con una clave por la cual
se realiza la ordenación, y los campos de enlace
(punteros o apuntadores) hacia los subárboles izquierdo
y derecho.
Estructuras de Datos y Algoritmos - Franco Guamán 4
15
Izq Der
5. Operaciones
• Inserción: Supone el ingreso de un nuevo elemento en el árbol,
de acuerdo a las reglas establecidas por el algoritmo.
• Eliminación: Implica la desvinculación de nodos del árbol. De
acuerdo al lenguaje de programación también implicará su borrado
de memoria. Mientras en C++ debemos utilizar la sentencia
delete(nodo), en Java no es necesario, ya que el procedimiento
Garbage Collector, propio del lenguaje, se encarga de eliminar
aquellos elementos desvinculados.
• Recorridos: Permite visitar una sola vez a cada nodo componente
del árbol. Aunque se puede realizar recorridos en anchura y en
profundidad, trataremos los tres principales recorridos en
profundidad: Preorden, Inorden y Posorden.
Estructuras de Datos y Algoritmos - Franco Guamán 5
6. Componente Nodo
El elemento básico para la creación de un ABB, es el nodo, el
cual constará de dos tipos de información: Parte informativa y
parte de enlace:
Estructuras de Datos y Algoritmos - Franco Guamán 6
Información
Enlaces
7. Inserción de un nuevo elemento
El algoritmo para la inserción de un nuevo elemento en un árbol
de búsqueda binaria se basa en las siguientes interrogantes:
1. Si el nodo en el cual estoy ubicado, está apuntando a null,
crear un nuevo elemento y enlazarlo a él.
2. Si no, preguntar si el nuevo elemento a insertar es mayor o
menor al elemento almacenado en el nodo en el cual estoy
ubicado.
• De acuerdo a la respuesta anterior, enviar a analizar el puntero
izquierdo si es menor o el puntero derecho en el caso contrario.
• Reiniciar el algoritmo recursivo.
Estructuras de Datos y Algoritmos - Franco Guamán 7
8. Inserción de un nuevo elemento
En el caso de utilizar C++, este proceso se realiza como se
muestra en el código a continuación.
Estructuras de Datos y Algoritmos - Franco Guamán 8
Se realiza un llamado a la función
de insertar, enviándole el puntero
raíz y el número a insertar
Ya que C++ acepta el envío de
punteros por referencia,
realiza la actualización de
punteros dentro de la misma
función, afectando así al árbol
declarado en el programa
principal.
9. Inserción de un nuevo elemento
Java solamente acepta el paso de punteros como parámetros por
valor, por lo cual, aunque utilicemos la misma lógica usada con
C++, debemos modificar el programa para que la actualización
de punteros se realice en el lugar desde donde se llamó al
método.
Estructuras de Datos y Algoritmos - Franco Guamán 9
Desde la clase main(), el puntero que indica la raíz del árbol,
apuntará hacia el nodo que será devuelto luego de ejecutarse
el método para agregar un nuevo elemento.
10. Inserción de un nuevo elemento
Estructuras de Datos y Algoritmos - Franco Guamán 10
como un método que devuelve un valor de tipo Nodo hacia el
proceso que lo invocó, logrando así asignar los valores indicados
a las variables de tipo puntero adecuadas.
El método recursivo para
inserción de elementos,
sigue la misma lógica
antes utilizada en el
programa en C++, pero
ahora funcionará
11. Eliminar un elemento
Estructuras de Datos y Algoritmos - Franco Guamán 11
La eliminación de elementos de un árbol binario implica tener que
considerar tres posibles casos, según el nodo:
1. Que no tenga un hijo izquierdo o ninguno, en cuyo caso
solamente deberíamos re direccionar su enlace antecesor
hacia su hijo derecho.
2. Que no tenga hijo derecho, haciendo que su nodo antecesor
se re direccione hacia su hijo izquierdo.
3. Que tenga dos nodos hijos, en cuyo caso se deberá encontrar
un nodo adecuado para reemplazar al nodo a eliminar y así
conservar la característica de ABB. Para esto se sigue la
lógica de encontrar al “Mayor de sus hijos menores” o al
“Menor de sus hijos mayores”.
12. Eliminar un elemento
Estructuras de Datos y Algoritmos - Franco Guamán 12
Previa a la eliminación de un nodo, debemos localizar el nodo a
eliminar, lo cual implica la realización de un sencillo proceso de
búsqueda.
13. Eliminar un elemento
Estructuras de Datos y Algoritmos - Franco Guamán 13
Si no se cumple ninguna de las opciones antes descritas,
entonces hemos localizado el elemento a eliminar, y verificamos a
cual de los tres casos descritos pertenece.
14. Eliminar un elemento
Estructuras de Datos y Algoritmos - Franco Guamán 14
En el caso de tener que eliminar un nodo con dos hijos,
realizamos el reemplazo de información de este nodo, con la del
nodo localizado según la lógica antes descrita.
EL proceso inicia con la
colocación de punteros
auxiliares, tanto en el nodo
a reemplazar como en su
hijo izquierdo (en el caso de
querer localizar al mayor de
los menores), y un proceso
repetitivo
que ubica los punteros lo más a la derecha posible.
15. Eliminar un elemento
Estructuras de Datos y Algoritmos - Franco Guamán 15
Para finalizar, se re
direccionará los
enlaces, desvinculando
así al nodo encontrado.
El próximo paso será asignar el valor (o la información) del
nodo encontrado al campo del nodo a reemplazar.
16. Recorridos
Estructuras de Datos y Algoritmos - Franco Guamán 16
Se denominan recorridos a la forma en que son visitados todos los
nodos de un árbol. Existen tres tipos de recorrido, según el orden en el
cual se ejecutan sus sentencias recursivas:
• Preorden. Visitar raíz, recorrer sub árbol izquierdo y recorrer sub
árbol derecho.
• Inorden. Recorrer sub árbol izquierdo, visitar raíz y recorrer sub
árbol derecho.
• Posorden. Recorrer sub árbol izquierdo, recorrer sub árbol derecho
y visitar raíz.
17. Recorridos
Estructuras de Datos y Algoritmos - Franco Guamán 17
El resultado de los recorridos antes descritos para el siguiente árbol
binario de búsqueda sería:
PreOrden: 15 – 9 – 6 – 14 – 13 – 20 – 17 – 64 – 26 – 72
InOrden : 6 – 9 – 13 – 14 – 15 – 17 – 20 – 26 – 64 – 72
PosOrden: 6 – 13 – 14 – 9 – 17 – 26 – 72 – 64 – 20 – 15