Está en la página 1de 25

Árboles Binarios de Búsqueda

(BST)
Ing. Luis Humberto González
ü Es una estructura de datos jerárquica.
ü La relación entre los elementos es de uno a muchos.

¿Qué es un Árbol?
ü Nodo: Cada elemento en un árbol.
ü Nodo Raíz: Primer elemento agregado al árbol.

Nodo Raíz

B C

D E F G

K
H

Terminología
ü Nodo Padre: Se le llama así al nodo predecesor de un elemento.
ü Nodo Hijo: Es el nodo sucesor de un elemento.
ü Hermanos: Nodos que tienen el mismo nodo padre.

A Nodo Padre

B C
F y G son Nodos Hijos de C
F y G son hermanos
D E F G

K
H

Más terminología
ü Nodo Hoja: Aquel nodo que no tiene hijos.

B C

D E F G
D, H, F y K son Nodos Hojas
K
H

Más terminología
ü Subárbol: Todos los nodos descendientes por la izquierda o derecha de
un nodo.
A

B C

D E F G
Subárbol derecho de C
K
H

Subárbol izquierdo de C

Más terminología
Altura del A
Nivel 0
árbol = 4
B C
Nivel 1
D E F G
Nivel 2
K
H
Nivel 3

La Altura es la cantidad de niveles.

Altura y Niveles
Este tipo de árbol permite almacenar información ordenada.
Reglas a cumplir:
ü Cada nodo del árbol puede tener 0, 1 ó 2 hijos.
ü Los descendientes izquierdos deben tener un valor menor al
padre.
ü Los descendientes derechos deben tener un valor mayor al
padre.

Árbol Binario de
Búsqueda (ABB)
21 30

33 33
13 21

5 25 36 41
18 32

40 43
15

Ejemplos de ABB…
21 5

33 6
13 1

17 18 22 4
25 2

15 40

¿Por qué no son ABB?


class NodeT
{ private:
int data;
NodeT *left, *righe;
public:
NodeT( );
NodeT(int d);
}
NodeT() { left = right= NULL; }
NodeT(int d) { data = d; left = right= NULL; }

Implementación de un BST…
class BST
{
private:
NodeT *root;
public:
BST( ); // constructor

//otros métodos
}

Continuación…
Paso
¿El 25 es mayor o
menor que el 21? Buscar el 25
1 21
Paso
2 21 ¿El 25 es
13 33 mayor o menor
que el 33?

13 33
10 40
18 25

10 18 40
25
Paso
3 21

13 33

10 18 40
25
Encontrado

Proceso para buscar un nodo...


public bool BST::search(int valor){
p=root;
while (p != null)
{ if (p.getData == valor)
return true; P contiene la dirección del nodo
que tiene el valor buscado
else
p=(p.getData() > valor ? p.getLeft(): p.getRight());
} Equivalente a:

return null; No se encontró el valor por lo que


se regresa un null if ( p.getData() > valor )
p = p.getLeft();
} else p = p.getRight();

Implementación de la búsqueda
Reglas:
ü El valor a insertar no existe en el árbol.
ü El nuevo nodo será un Nodo Hoja del árbol.
Procedimiento
1. Buscar el Nodo Padre del nodo a agregar.
2. Agregar el nodo.

Proceso para agregar nodos...


Agregar el valor 26
Paso ¿El 26 es mayor o
menor que el 21?
Paso
1 21 21
2
¿El 26 es
13 33 33 mayor o menor
13 que el 33?

10 40 40
18 25 10 18 25

Paso Paso
3 21 4 21

33 13 33
13

18 40 10 18 40
10 25 25
Se encontró el Nodo
Padre

Ejemplo
Agregar el nodo
26
ü El orden de inserción de los datos, determina la forma del ABB.
ü ¿Qué pasará si se insertan los datos en forma ordenada?
ü La forma del ABB determina la eficiencia del proceso de búsqueda.
ü Entre menos altura tenga el ABB, más balanceado estará, y más
eficiente será.
Este árbol está 10
desbalanceado
porque los valores se 13
agregaron en el siguiente
orden:
18
10, 13, 18, 21, 25, 33

21

Comentarios 25

importantes.... 33
Si el nodo a eliminar es un:
ü Nodo hoja
• Buscar el Nodo Padre del nodo a borrar.
• Desconectarlo.
• Liberar el nodo.
ü Nodo con un hijo
• Buscar el Nodo Padre del nodo a borrar.
• Conectar el hijo con el padre del nodo a borrar.
• Liberar el nodo.
ü Nodo con dos hijos
• Localizar el nodo predecesor o sucesor del nodo a borrar.
• Copiar la información.
• Eliminar el predecesor o sucesor según sea el caso.

Proceso para eliminar un


nodo
Eliminar el valor 25
Paso 21
1
Nodo Padre
33 localizado
13
Paso
2 21
10 18 25 40

13 33

10 18 40
25
Desconectarlo y
liberar el nodo

Caso: Eliminar Nodo hoja


Eliminar el valor 25
Paso 21
1
Nodo Padre
33 localizado
13 Paso
2 21

10 18 25 40
13 33
25
29
10 18 40
29
27 30
Conectar el Nodo
Padre con el Nodo
27 30 Hijo y liberar el
nodo.

Caso: Eliminar Nodo con un hijo


1. Localizar el nodo predecesor o sucesor del nodo a
borrar.
• El PREDECESOR es “el Mayor de los Menores”.
• El SUCESOR es “el Menor de los Mayores”.
• Para la implementación es igual de eficiente programar la
búsqueda del predecesor que del sucesor.
2. El valor del Predecedor (o sucesor) se copia al nodo a
borrar.
3. Eliminar el nodo del predecesor (o sucesor según sea el
caso).

Caso: Eliminar nodo con dos hijos


Uno a la IZQUIERDA y todo a la DERECHA

21

El predecesor de: es:


33
13
33 30

10 25 40 21 13

29 29 27

27 30

Predecesor
Uno a la DERECHA y todo a la IZQUIERDA

21
El sucesor de: es:
33 21 25
13

33 40
10 18 25 40
29 30
29

27 30

Sucesor
Eliminar el valor 21
Localizar el valor a
utilizando el predecesor
Paso
borrar Paso 21
1 21 2

13 33
13 33

10 40
40 18 25
10 18 25
Localizar el Predecesor
Copiar el valor del
Paso Predecesor al nodo que
Paso
contenía el valor a borrar
3 18 4 18

33 13 33
13

10 40 10 25 40
18 25 18
Desconectar y liberar el

Caso: Eliminar Nodo con dos hijos


nodo del Predecesor
Eliminar el valor 21
utilizando el Sucesor
Localizar el valor a
Paso borrar Paso 21
1 21 2

13 33
13 33

10 40
40 18 25
10 18 25
Localizar el Sucesor

Copiar el valor del


Sucesor al nodo que Paso
Paso contenía el valor a borrar 4 25
3 25
13 33

13 33

10 18 25 40
10 18 40
25 Desconectar y liberar el

Caso: Eliminar Nodo con dos hijos


nodo del Sucesor

También podría gustarte