pruarbp.pas
{ COMIENZO DE DESCRIPCION
Prueba arboles enlazados por punteros.
keywords: arbol orientado, punteros
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: pruarbp.pas 2002/04/25 19:49 mstorti Exp mstorti $ }
program pruarb;
uses u_arborip; { uses u_arbori;}
type
arbol = arborip;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function CUENTA_HIJOS (n: nodo; a: arbol): integer;
var
c : nodo;
begin
c := a.HIJO_MAS_IZQ (n);
cuenta_hijos := 0;
while (c <> lambda) do begin
cuenta_hijos := cuenta_hijos + 1;
c := a.HERMANO_DER (c);
end; {while}
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function CUENTA_HERM (n: nodo; a: arbol): integer;
begin
CUENTA_HERM := CUENTA_HIJOS (a.PADRE (n), a);
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure RANDOM_ARB (a :arbol; nn :integer );
var
j, M, k, v, max_herm : integer;
n, q : nodo;
begin
a.ANULA (a.RAIZ);
m := 100 ;
max_herm := 4;
n := a.AGREGA_HIJO_MAS_IZQ (random (m),lambda);
for j := 1 to nn do begin
for k:=1 to 20 do begin
if (random (2) = 0)
and (a.HIJO_MAS_IZQ (n) <> lambda) then
n := a.HIJO_MAS_IZQ (n)
else begin
q := a.HERMANO_DER (n);
if (q = lambda) then q := a.PADRE (n);
if (q <>lambda) then n := q;
end; {if}
end; {k}
if ( random (3) = 0)
or (a.PADRE (n) = lambda)
or (CUENTA_HERM (n,a) >= max_herm) then begin
while (CUENTA_HIJOS (n,a) >= max_herm) do begin
n := a.HIJO_MAS_IZQ (n);
end ; {while}
v := random (m);
a.AGREGA_HIJO_MAS_IZQ (v,n);
writeln ('agrega ',v,' como hijo_mas_izq');
end {then}
else begin
v := random (m);
a.AGREGA_HERM_DER (v,n);
writeln ('agrega ',v,' como herm_der');
end; {if}
end; {j}
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
a, b, c, d, e, f : arbol;
n, n1, n30, n70 : nodo;
begin
a.INICIALIZA; { INICIALIZA_nodos;}
n := a.AGREGA_HIJO_MAS_IZQ (10,lambda);
n := a.AGREGA_HIJO_MAS_IZQ (20,n);
n := a.AGREGA_HERM_DER (30,n);
n30 := n;
n := a.AGREGA_HIJO_MAS_IZQ (40,n);
n1 := a.AGREGA_HERM_DER (50,n);
n := a.AGREGA_HERM_DER (80,n1);
n := a.AGREGA_HIJO_MAS_IZQ (60,n1);
n := a.AGREGA_HERM_DER (70,n);
n70 := n;
a.IMPRIME_ARB ('arbol a: ');
b.INICIALIZA;
b.CORTA_PEGA_HIJO_MAS_IZQ (a, n1, lambda);
writeln ('Pega nodo 50 en la raiz de b');
a.IMPRIME_ARB ('a despues: ');
b.IMPRIME_ARB ('b despues: ');
writeln;
b.CORTA_PEGA_HERM_DER (a, n30, n70);
writeln('Pega nodo 30 como hermano derecho de 70');
a.IMPRIME_ARB ('a despues: ');
b.IMPRIME_ARB ('b despues: ');
a.ANULA (a.RAIZ);
b.ANULA (a.RAIZ);
writeln;
writeln;
c.INICIALIZA;
RANDOM_ARB (c,20);
c.IMPRIME_ARB ('c: ');
d.INICIALIZA;
RANDOM_ARB (d,10);
d.IMPRIME_ARB ('d: ');
e.INICIALIZA;
RANDOM_ARB (e,10);
e.IMPRIME_ARB ('e: ');
f.CREA2 (555, d.RAIZ, e.RAIZ);
f.IMPRIME_ARB ('f: ');
d.IMPRIME_ARB ('d: ');
e.IMPRIME_ARB ('e: ');
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.