Está en la página 1de 17

Taller de

Programación

1
ÁRBOLES BINARIOS DE BÚSQUEDA- Características

Un árbol binario de búsqueda es una estructura de datos


jerárquica. Está formada por nodos, donde cada nodo
tiene a lo sumo dos hijos y mantienen un orden. El nodo
principal del árbol se denomina raíz y los nodos que no
tienen hijos se denominan hojas del árbol.

Características: homogénea – dinámica – no lineal - acceso secuencial


Operaciones: crear – imprimir – buscar – mínimo – máximo - eliminar
Cómo se ven Cómo se
Clase 3 – Módulo Imperativo
gráficamente? declaran?
ÁRBOLES BINARIOS DE BÚSQUEDA- Gráficamente
RAÍZ RAÍZ

NODO NODO
HOJA HOJA

Clase 3 – Módulo Imperativo


ÁRBOLES BINARIOS DE BÚSQUEDA- Declaración
15 Programa arboles;

Type
8 24 arbol = ^nodo;
tipo = ...;
nodo = record
7 12 dato: tipo;
16 30
HI: arbol;
HD: arbol;
15 end;

Var
30 8 a:arbol;
Begin
….
24 10 4 End.
Clase 3 – Módulo Imperativo
ÁRBOLES BINARIOS DE BÚSQUEDA- Creación
Suponga que se leen los siguientes valores y se quiere crear
un ABB (15, 18, 22, 16, 7) Cómo cree que quedará el árbol?

A
15 Como el árbol es vacío, se genera un 15
nodo nuevo y el valor 15 ocupará la
raíz del árbol.
A
18 Como el árbol NO es vacío, tengo que 15
recorrer desde la raíz hasta el lugar
correspondiente respetando el orden.
Siempre se inserta en una hoja. Siempre 18
debo generar un espacio para el nuevo
dato.

Clase 3 – Módulo Imperativo


ÁRBOLES BINARIOS DE BÚSQUEDA- Creación
Suponga que se leen los siguientes valores y se quiere crear
un ABB (15, 18, 22, 16, 7) Cómo cree que quedará el árbol?

Como el árbol NO es vacío, tengo que A


22 15
recorrer desde la raíz hasta el lugar
correspondiente respetando el orden.
Siempre se inserta en una hoja. Siempre 18
debo generar un espacio para el nuevo
dato. A
15
22
Como el árbol NO es vacío, tengo que
16 recorrer desde la raíz hasta el lugar 18
correspondiente respetando el orden.
Siempre se inserta en una hoja. Siempre
debo generar un espacio para el nuevo 22
dato. 16
Clase 3 – Módulo Imperativo
ÁRBOLES BINARIOS DE BÚSQUEDA- Creación
Suponga que se leen los siguientes valores y se quiere crear
un ABB (15, 18, 22, 16, 7) Cómo cree que quedará el árbol?

Como el árbol NO es vacío, tengo que A


7 recorrer desde la raíz hasta el lugar 15
correspondiente respetando el orden.
Siempre se inserta en una hoja. Siempre 18
debo generar un espacio para el nuevo 7
dato.
16 22

Cómo cree que quedará el árbol si


ahora se lee el 10, 15?
Cómo se implementa?

Clase 3 – Módulo Imperativo


ÁRBOLES BINARIOS DE BÚSQUEDA- Creación
Programa arboles;

Type Procedure crear (var A:árbol; num:integer);


arbol = ^nodo;
Begin
nodo = record if (A = nil) then
dato: integer;
HI: arbol; begin
HD: arbol; new(A);
end;
A^.dato:= num; A^.HI:= nil; A^.HD:= nil;
Var end
abb:arbol; x:integer;
Begin else
abb:=nil; if (num < A^.dato) then crear(A^HI,num)
read (x);
while (x<>0)do else crear(A^.HD,num)
begin End;
crear(abb,x);
read(x);
end; Cómo funciona?
End.
Clase 3 – Módulo Imperativo
ÁRBOLES BINARIOS DE BÚSQUEDA- Creación
Supongamos que recibe 15 7 a = nil num=15
Procedure crear (var A:arbol; num:integer);
Begin
crear a=nil, num=15, A
if (A = nil) then
begin 15
new(A);
A^.dato:= num; A^.HI:= nil; A^.HD:= nil;
a = 15 num=7
end
else
if (num < A^.dato) then crear(A^.HI,num)
crear a=15, num=7, A
else crear(A^.HD,num)
End; Se invoca con el hijo izquierdo 15

A
crear a= nil,num=7,
7
Clase 3 – Módulo Imperativo
Cómo se imprime? 7
ÁRBOLES BINARIOS DE BÚSQUEDA- Impresión
a=15
Procedure enOrden ( a : arbol );
HI=6 1 2 3
begin A HD=18
15
if ( a<> nil ) then begin Imprime 15

1 enOrden (a^.HI); a=6 a=18


18
2 write (a^.dato); 6 HI=nil 123 HI=nil 1 23
HD=nil HD=nil
3 enOrden (a^.HD);
22
end; Imprime 6 Imprime 18

end;
a=nil No a=nil No a=nil No a=22
Cómo son los llamados HI=nil hace HI=nil hace HI=nil hace HI=nil 1 2 3
recursivos? HD=nil nada HD=nil nada HD=nil nada HD=nil

Cuántas instancias a=nil No a=nil No Imprime 22


recursivas se crearon? HI=nil hace HI=nil hace
Clase 3 – Módulo Imperativo
HD=nil nada HD=nil nada
ÁRBOLES BINARIOS DE BÚSQUEDA- Impresión
Procedure preOrden ( a : arbol );
begin Qué imprime?
if ( a<> nil ) then begin A
15
1 write (a^.dato); Cómo son los
2 preOrden (a^.HI); 18 llamados recursivos?
6
3 preOrden (a^.HD);
end; Cuántas instancias
22
end; recursivas se
crearon?

Clase 3 – Módulo Imperativo


ÁRBOLES BINARIOS DE BÚSQUEDA- Impresión
Procedure posOrden ( a : arbol );
begin Qué imprime?
if ( a<> nil ) then begin A
15
1 posOrden (a^.HI); Cómo son los
2 posOrden (a^.HD); 18 llamados recursivos?
6
3 write (a^.dato);

22 Cuántas instancias
end; recursivas se
end; crearon?

Clase 3 – Módulo Imperativo


ÁRBOLES BINARIOS DE BÚSQUEDA- Búsqueda
Suponga que se tiene un ABB como buscamos un elemento?

A
15
Cómo aprovecho el
18 orden del ABB?
6

22

Dado un árbol y un valor x, esta operación retorna un puntero al nodo en el árbol A que
tiene valor x o Nil si no existe.

Clase 3 – Módulo Imperativo


ÁRBOLES BINARIOS DE BÚSQUEDA- Búsqueda
Suponga que se tiene un ABB, ¿cómo buscamos un elemento?
Supongamosque
se busca el
valor 10 A Como 15 <> 10, y 10<15,
15 entonces busco por su hijo
izquierdo
Como 6 <> 10, y 18
10>6, entonces 6
busco por su hijo
derecho 22
10

Como 10 = 10, encontré el


elemento la búsqueda termina y
8 retorno el nodo
Clase 3 – Módulo Imperativo
ÁRBOLES BINARIOS DE BÚSQUEDA- Búsqueda
Suponga que se tiene un ABB, ¿cómo buscamos un elemento?
Supongamos que
se busca el Como 15 <> 20, y 20>15,
A entonces busco por su hijo
valor 20 15
derecho
Como 18 <> 20, y 20>18,
18 entonces busco por su hijo
6
derecho
Como 22 <> 20, y 20<22,
10 22
entonces busco por su hijo
izquierdo

8 Como es nil termina la


búsqueda Cómo lo
escribo?
Clase 3 – Módulo Imperativo
ÁRBOLES BINARIOS DE BÚSQUEDA- Búsqueda
Function Buscar (a:arbol; x:elemento): arbol;
begin
if (a=nil) then
Buscar:=nil
else if (x = a^.dato) then Buscar:=a
else

if (x < a^.dato) then


Buscar:= Buscar(a^.hi ,x)
else
Buscar:=Buscar(a^.hd ,x)
end;

Clase 3 – Módulo Imperativo


ÁRBOLES BINARIOS DE BÚSQUEDA- Conclusiones
Un árbol binario de búsqueda agrega los elementos por sus hojas.
Dichos elementos quedan ordenados. Esta operación lleva un tiempo
de ejecución de O(log n).
Qué ocurre en vectores y listas si quiero generar la
estructura ordenada?

En un árbol binario de búsqueda la búsqueda de un elemento es de


O(log n).
Qué ocurre en vectores y listas si quiero buscar un elemento?
En qué caso no se cumple que el tiempo de búsqueda sea
O(log n)?

Si los valores leídos son 7, 10, 22, 44. ¿Cómo queda formado el
árbol?
Clase 3 – Módulo Imperativo

También podría gustarte