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.