bilistado.pas

{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION

El `bi-listado' de un arbol ordenado orientado puede
pensarse como una combinacion de los listados previo y
posterior. Asumamos que las etiquetas tienen dos partes,
una etiqueta `derecha' y otra `izquierda', entonces el
bi-listado de un nodo n se define como:
BI_LISTADO (n) = (ETIQUETA_IZQUIERDA (n), BI_LISTADO(h1),
BI_LISTADO (h2), ...  ETIQUETA_DERECHA (n)),
donde h1,h2 ... son los hijos de n. Por ejemplo, si
A:1 ( 8 ( 3 2 ) 4 ( 9 2 ) ), y tomamos como etiqueta centro
a (100+etiqueta) y etiqueta izquierda como (200+etiqueta),
entonces debe listar (10 21 121 30 40 140 51 60 160 70 170
151 80 180 130 110).  Para simplificar, en vez de tener 2
etiquetas tenemos una sola etiqeta entera `e' y la etiqueta
derecha es 100+e. Por ejemplo si la etiqueta es 11 entonces
las etiquetas izquierda y derecha son [11,111].
[Tomado 2do parcial de 2003, 3-Jun-2003]

Keywords:arbol orientado

  FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: bilistado.pas 2003/06/04 11:19 mstorti Exp jdelia $ }
program  bilistado_p;
uses u_arborip;
type
   arbol = arborip;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure BI_LISTADO (n : nodo; a: arbol);
var
  c : nodo;
begin
  if (n <> lambda) then begin
    { Imprime etiqueta izquierda }
    write (a.ETIQUETA (n),' ');
    c := a.HIJO_MAS_IZQ (n);
    { Aplica BI_LISTADO a los hijos }
    while (c <> lambda) do begin
      BI_LISTADO (c, a);
      c := a.HERMANO_DER (c);
    end;
    { Imprime etiqueta derecha }
    write (100 + a.ETIQUETA (n),' ');
  end ; {if}
end ;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
   a     : arbol;
   n, n1 : nodo;
begin
   a.INICIALIZA;
   n   := a.AGREGA_HIJO_MAS_IZQ (10, lambda);
   n   := a.AGREGA_HIJO_MAS_IZQ (21, n);
   n   := a.AGREGA_HERM_DER     (30, n);
   n   := a.AGREGA_HIJO_MAS_IZQ (40, n);
   n1  := a.AGREGA_HERM_DER     (51, n);
   n   := a.AGREGA_HERM_DER     (80, n1);
   n   := a.AGREGA_HIJO_MAS_IZQ (60, n1);
   n   := a.AGREGA_HERM_DER     (70, n);
   a.IMPRIME_ARB ('arbol a: ');
   n := A.RAIZ ;

   write('Bi_listado ');
   writeln;
   BI_LISTADO (n, a);
   writeln;
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.