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.