trilistado.pas
{ COMIENZO DE DESCRIPCION
El `tri-listado' de un arbol ordenado binario puede
pensarse como una combinacion de los listados previo,
posterior y simetrico. Asumamos que las etiquetas tienen
tres partes, una etiqueta `derecha', una `izquierda' y
otra 'centro', entonces el tri-listado de un nodo n se
define como:
TRI_LISTADO (n) = (ETIQ_IZQ (n), TRI_LISTADO (HIJO_IZQ (n)),
ETIQ_CENTRO (n), TRI_LISTADO (HIJO_DER(n)), ETIQ_DER (n)).
Por ejemplo, si A: 1 ( 8 ( 3 2 ) 4 ( 9 2 ) ), y tomamos como
etiqueta derecha a (100+etiqueta) y etiqueta izquierda como
(200+etiqueta), entonces debe listar (1 8 3 103 203 108 2
102 202 208 101 4 9 109 209 104 2 102 202 204 201). Para
simplificar, en vez de tener 3 etiquetas tenemos una sola
etiqeta entera `e'. La etiqueta del centro es (100+e) y la
derecha es (200+e). Por ejemplo si la etiqueta es 11
entonces las etiquetas izquierda, centro y derecha son
[11,111,211]. [Tomado 2do parcial de 2003, 3-Jun-2003].
Keywords: arbol binario
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $Id: trilistado.pas 2003/06/04 11:32 mstorti Exp jdelia $ }
program tri_listado_p;
uses u_arbbii, arbbtools;
type
bosque = bosque_arbbii;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure TRI_LISTADO (n: curs_nodo; a: bosque);
begin
if (n <> Lambda) then begin
{ Imprime ETIQUETA `izquierda' }
write (a.ETIQUETA (n),' ');
{ Aplica tri_listado al hijo izquierdo }
tri_listado (a.HIJO_IZQ(n), a);
{ Imprime ETIQUETA `centro' }
write (100 + a.ETIQUETA (n),' ');
{ Aplica tri_listado al hijo derecho }
tri_listado (a.HIJO_DER (n), a);
{ Imprime ETIQUETA `derecha' }
write (200 + a.ETIQUETA (n),' ');
end ; {if}
end ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
a : bosque;
n : curs_nodo;
begin
a.INICIALIZA_NODOS;
n := crea_de_string ('1{8{3,2},4{9,2}}',a);
write ('Tri-listado: ');
TRI_LISTADO (n, a);
writeln;
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.