Professional Documents
Culture Documents
Nivel lgico
Qu es un rbol?
Algortmica y Programacin II
Terminologa bsica
Algortmica y Programacin II
Terminologa bsica
Algortmica y Programacin II
Algortmica y Programacin II
Nodo
raz
Nivel 0
Subrbol
Nodos
hoja
Nivel 2
Algortmica y Programacin II
Algortmica y Programacin II
Algortmica y Programacin II
Qu
operaciones
necesitan?
Algortmica y Programacin II
se
Crear
Insertar
Suprimir
Vaco
Buscar
Limpiar
Algortmica y Programacin II
Crear(Arbol)
Funcin:
Entrada:
Precondiciones:
Salida:
Poscondiciones:
10
Algortmica y Programacin II
11
Algortmica y Programacin II
Algortmica y Programacin II
13
Algortmica y Programacin II
14
Algortmica y Programacin II
Limpiar(Arbol)
Funcin:
15
Algortmica y Programacin II
16
Algortmica y Programacin II
TAD ABB
type TipoNodo;
type TipoArbol is access TipoNodo;
type TipoNodo is
record
Info: TipoElem;
Izq, Der: TipoArbol;
end record;
TipoNodo
Info
Algortmica y Programacin II
17
generic
type TipoElem is private;
with function "<" (X, Y: TipoElem) return Boolean;
with function ">" (X, Y: TipoElem) return Boolean;
with procedure Put (X: in TipoElem);
package Arbol is
type TipoArbol is private;
-- procedure Crear (Raiz: out TipoArbol); -- no es necesario
function Vacio (Raiz: TipoArbol) return Boolean;
procedure Insertar (Raiz: in out TipoArbol; Elemento: in TipoElem);
procedure Suprimir (Raiz: in out TipoArbol; ValSup: in TipoElem);
function Esta (Raiz: in TipoArbol; Buscado: in TipoElem) return Boolean;
procedure Limpiar (Ptr: in out TipoArbol);
function Izq (Ptr: TipoArbol) return TipoArbol;
function Der (Ptr: TipoArbol) return TipoArbol;
function Info (Ptr: TipoArbol) return TipoElem;
ArbolVacio: exception;
18
Algortmica y Programacin II
with Ada.Unchecked_Deallocation;
package body Arbol is
procedure Free is new Ada.Unchecked_Deallocation(TipoNodo, TipoArbol);
function Vacio (Raiz: TipoArbol) return Boolean is
begin
return Raiz = null;
end Vacio;
procedure Limpiar (Ptr: in out TipoArbol) is
begin
if not Vacio (Ptr) then
Limpiar (Ptr.Izq);
Limpiar (Ptr.Der);
Free (Ptr);
end if;
end Limpiar;
19
Algortmica y Programacin II
Operacin Insertar
[Dale 2003]
20
Algortmica y Programacin II
21
Algortmica y Programacin II
22
Algortmica y Programacin II
Insertar
Elemento=13
[Dale 2003]
23
Operacin Suprimir
Algortmica y Programacin II
1.
2.
24
Operacin Suprimir
Algortmica y Programacin II
[Dale 2003]
25
Operacin Suprimir
Algortmica y Programacin II
[Dale 2003]
26
Algortmica y Programacin II
Supresin de un ABB
[Dale 2003]
27
28
Algortmica y Programacin II
30
Algortmica y Programacin II
31
Algortmica y Programacin II
Nivel de aplicacin
Algortmica y Programacin II
33
Ejemplo
Algortmica y Programacin II
Recorridos en un ABB
Algortmica y Programacin II
Algortmica y Programacin II
Raz
Imprimir
primero
Imprimir
segundo
Imprimir
al final
36
Algortmica y Programacin II
Algortmica y Programacin II
Algortmica y Programacin II
39
Raiz
P
Inicio
PilaPun
PilaPun
Sacar y escribir
Nulo
Algortmica y Programacin II
E
N
Obtener subrbol
derecho
N
P
PilaPun
Salida: E
Salida: E
N
N
Sacar y escribir
N
P
Nulo
PilaPun
Salida: E
PilaPun
P
PilaPun
Salida: E K
40
P Sacar y escribir
E
S
Nulo
Salida: E K N
PilaPun
Salida: E K
Algortmica y Programacin II
Nulo
Ir a la derecha
PilaPun
P
S
S
Nulo
PilaPun
PilaPun
Salida: E K N
Salida: E K N
N
Ir a la derecha
Sacar y escribir
S
P
PilaPun
Nulo
PilaPun
Salida: E K N S
Salida: E K N S
41
Recorrido Inorden
Raiz
Algortmica y Programacin II
InOrden:
BDEHKMNQRSTVWZ
42
Algortmica y Programacin II
Algortmica y Programacin II
Recorrido InOrden
Definicin: recorre todos los nodos del ABB,
visitando cada nodo entre su subrbol izquierdo y su
subrbol derecho. Imprime todos los elementos del
ABB en orden de menor a mayor.
Tamao:
Todos los nodos del rbol.
Caso base:
P=Nulo.
Caso general: Recorrer el subrbol izquierdo en
Inorden.
Imprimir Info(P)
Recorrer el subrbol derecho en
Inorden.
44
Algortmica y Programacin II
begin
if not Vacio(Ptr) then InOrden (Izq(Ptr));
Put (Info(Ptr));
InOrden (Der(Ptr));
end if;
end InOrden;
45
Algortmica y Programacin II
Recorrido PreOrden
Definicin: recorre todos los elementos del rbol
binario, visitando cada nodo antes que su subrbol
izquierdo y su subrbol derecho.
Tamao:
Todos los nodos del rbol.
Caso base:
P=Nulo.
Caso general: Imprimir Info(P)
Recorrer el subrbol izquierdo en
PreOrden.
Recorrer el subrbol derecho en
PreOrden.
46
Recorrido Preorden
Raiz
Algortmica y Programacin II
PreOrden: N E D B K H M S R Q W V T Z
47
Algortmica y Programacin II
begin
if not Vacio(Ptr) then Put (Info(Ptr));
PreOrden (Izq(Ptr));
PreOrden (Der(Ptr));
end if;
end PreOrden;
48
Recorrido PosOrden
Algortmica y Programacin II
Recorrido Posorden
Raiz
Algortmica y Programacin II
PosOrden: B D H M K E Q R T V Z W S N
50
Algortmica y Programacin II
begin
if not Vacio(Ptr) then PosOrden (Izq(Ptr));
PosOrden (Der(Ptr));
Put (Info(Ptr));
end if;
end PosOrden;
51