iguales.pas

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

 Ejercicio tomado en el 2do parcial/01: verificar si dos
 \'arboles ordenados y orientados son iguales, es decir,
 si tienen la misma estructura y contenido.
 keywords: arbol orientado

FIN DE DESCRIPCION }

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: iguales.pas  2002/04/05 13:30 mstorti Exp jdelia $  }
program iguales_ord;
uses u_arbori;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function IGUALES (n1, n2: curs_nodo;
                  B: Bosque_ArbOri): boolean;
var
  c1, c2 : curs_nodo;
begin
  { O los dos son lambda o los dos son diferentes de lambda }
  { Aqui el <> funciona como un xor }
  if (n1 = lambda) <> (n2 = lambda) then begin
    IGUALES := false;
    exit;
  end; {if}

  { Dos arboles vacios son iguales }
  if (n1 = lambda) and (n2 = lambda) then begin
    IGUALES := true ;
    exit;
  end; {if}

  { Si las etiquetas del nodo son diferentes son distintos }
  if B.ETIQUETA (n1) <> B.ETIQUETA (n2) then begin
    IGUALES := false;
    exit;
  end; {if}

  { Recorre las listas de hijos y compara recursivamente }
  c1 := B.HIJO_MAS_IZQ (n1);
  c2 := B.HIJO_MAS_IZQ (n2);
  while (c1 <> lambda) and (c2 <> lambda) do begin
    if not IGUALES (c1,c2,B) then begin
      IGUALES := false;
      exit;
    end; {if}
    c1 := B.HERMANO_DER (c1);
    c2 := B.HERMANO_DER (c2);
  end ; {while}

  { Las dos listas de hijos deben tener la misma longitud }
  IGUALES := (c1 = lambda) and (c2 = lambda);
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
   BB : Bosque_ArbOrI;
   arbol, arb1, arb2, arb3, arb4, arb5      : curs_nodo;
   arb6, arb7, arb8, arb9, arb0             : curs_nodo;
   arbolb, arbb1, arbb2, arbb3, arbb4, arbb5: curs_nodo;
   arbolc, arbb6, arbb7, arbb8, arbb9, arbb0: curs_nodo;
begin

   BB.INICIALIZA_NODOS;

   arb1   := BB.CREA0 (33);
   arb2   := BB.CREA0 (8);
   arb3   := BB.CREA0 (7);
   arb4   := BB.CREA0 (62);
   arb5   := BB.CREA0 (130);
   arb6   := BB.CREA0 (12);
   arb7   := BB.CREA3 (41,arb2,arb3,arb4);
   arb8   := BB.CREA2 (63,arb1,arb7);
   arb9   := BB.CREA0 (48);
   arb0   := BB.CREA2 (125,arb5,arb6);

   arbol  := BB.CREA3 (142,arb8,arb9,arb0);

   arbb1  := BB.CREA0 (33);
   arbb2  := BB.CREA0 (8);
   arbb3  := BB.CREA0 (7);
   arbb4  := BB.CREA0 (62);
   arbb5  := BB.CREA0 (130);
   arbb6  := BB.CREA0 (12);
   arbb7  := BB.CREA3 (41,arbb2,arbb3,arbb4);
   arbb8  := BB.CREA2 (63,arbb1,arbb7);
   arbb9  := BB.CREA0 (48);
   arbb0  := BB.CREA2 (125,arbb5,arbb6);

   arbolb := BB.CREA3 (142,arbb8,arbb9,arbb0);

   arbb1  := BB.CREA0 (33);
   arbb2  := BB.CREA0 (8);
   arbb3  := BB.CREA0 (7);
   arbb4  := BB.CREA0 (62);
   arbb5  := BB.CREA0 (130);
   arbb6  := BB.CREA0 (16);
   arbb7  := BB.CREA3 (41,arbb2,arbb3,arbb4);
   arbb8  := BB.CREA2 (63,arbb1,arbb7);
   arbb9  := BB.CREA0 (48);
   arbb0  := BB.CREA2 (125,arbb5,arbb6);

   arbolc := BB.CREA3 (142,arbb8,arbb9,arbb0);

   writeln('iguales ? ',IGUALES (arbol,arbb1,BB));
   writeln('iguales ? ',IGUALES (arbol,arbolb,BB));
   writeln('iguales ? ',IGUALES (arbol,arbolc,BB));
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.