Advertisement
diegoguerrero

ED - TAD Árbol - Árbol binario (*EXTENSIÓN*) v. 1

Apr 18th, 2019
563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.77 KB | None | 0 0
  1. UNIT uArbolBinarioExtension;
  2. INTERFACE
  3.  
  4.     USES uElementoInteger, uArbolBinario, uInteger;
  5.  
  6.     {Constructoras no generadoras}
  7.         PROCEDURE Espejo(arbolOrigen : TArbolBin; VAR arbolEspejo : TArbolBin);
  8.     {Observadoras no selectoras}
  9.         FUNCTION NumNodos(a : TArbolBin):integer;
  10.         FUNCTION NumHojas(a : TArbolBin):integer;
  11.         FUNCTION Altura(a : TArbolBin):integer;
  12.         FUNCTION Compensado(a : TArbolBin):boolean;
  13.         FUNCTION NivelElemento(e : TElemento; a : TArbolBin):integer;
  14.  
  15. IMPLEMENTATION
  16. {Constructoras no generadoras}
  17.     PROCEDURE Espejo(arbolOrigen : TArbolBin; VAR arbolEspejo : TArbolBin);
  18.         VAR
  19.             hi, hd, hie, hde : TArbolBin;
  20.             r : TElemento;
  21.         BEGIN
  22.             IF (EsArbolBinVacio(arbolOrigen)) THEN
  23.                 CrearArbolBinVacio(arbolEspejo)
  24.             ELSE BEGIN
  25.                 Raiz(arbolOrigen, r);
  26.                 HijoIzq(arbolOrigen, hi);
  27.                 HijoDch(arbolOrigen, hd);
  28.                 Espejo(hi, hie);
  29.                 Espejo(hd, hde);
  30.                 ConstruirArbolBin(arbolEspejo, hie, r, hde);
  31.             END;
  32.         END;
  33. {Observadoras no selectoras}
  34.     FUNCTION NumNodos(a : TArbolBin):integer;
  35.         VAR
  36.             hi, hd : TArbolBin;
  37.         BEGIN
  38.             IF (EsArbolBinVacio(a)) THEN
  39.                 NumNodos := 0
  40.             ELSE BEGIN
  41.                 HijoIzq(a, hi);
  42.                 HijoDch(a, hd);
  43.                 NumNodos := 1 + NumNodos(hi) + NumNodos(hd);
  44.             END;
  45.         END;
  46.     FUNCTION NumHojas(a : TArbolBin):integer;
  47.         VAR
  48.             hi, hd : TArbolBin;
  49.         BEGIN
  50.             IF (EsArbolBinVacio(a)) THEN
  51.                 NumHojas := 0
  52.             ELSE BEGIN
  53.                 HijoIzq(a, hi);
  54.                 HijoDch(a, hd);
  55.                 IF ((EsArbolBinVacio(hi)) AND (EsArbolBinVacio(hd))) THEN
  56.                     NumHojas := 1
  57.                 ELSE
  58.                     NumHojas := NumHojas(hi) + NumHojas(hd);
  59.             END;
  60.         END;
  61.     FUNCTION Altura(a : TArbolBin):integer;
  62.         VAR
  63.             hi, hd : TArbolBin;
  64.             max : integer;
  65.         BEGIN
  66.             IF (EsArbolBinVacio(a)) THEN
  67.                 Altura := 0
  68.             ELSE BEGIN
  69.                 HijoIzq(a, hi);
  70.                 HijoDch(a, hd);
  71.                 Altura := 1 + Maximo(Altura(hi), Altura(hd));
  72.             END;
  73.         END;
  74.     FUNCTION Compensado(a : TArbolBin):boolean;
  75.         VAR
  76.             hi, hd : TArbolBin;
  77.         BEGIN
  78.             IF (EsArbolBinVacio(a)) THEN
  79.                 Compensado := TRUE
  80.             ELSE BEGIN
  81.                 Compensado := (NumNodos(hi) = NumNodos(hd));
  82.             END;
  83.         END;
  84.     FUNCTION NivelElemento(e : TElemento; a : TArbolBin):integer;
  85.         VAR
  86.             r : TElemento;
  87.             ni, nd : integer;
  88.             hi, hd : TArbolBin;
  89.         BEGIN
  90.             IF (EsArbolBinVacio(a)) THEN
  91.                 NivelElemento := 0
  92.             ELSE BEGIN
  93.                 Raiz(a, r);
  94.                 IF (SonIguales(r, e)) THEN
  95.                     NivelElemento := 1
  96.                 ELSE BEGIN
  97.                     HijoIzq(a, hi);
  98.                     HijoDch(a, hd);
  99.                     ni := NivelElemento(e, hi);
  100.                     nd := NivelElemento(e, hd);
  101.                     IF ((ni > 0) AND (nd > 0)) THEN
  102.                         NivelElemento := 1 + Minimo(ni, nd)
  103.                     ELSE BEGIN
  104.                         IF (ni > 0) THEN
  105.                             NivelElemento := 1 + ni
  106.                         ELSE
  107.                             IF (nd > 0) THEN
  108.                                 NivelElemento := 1 + nd
  109.                             ELSE
  110.                                 NivelElemento := 0;
  111.                     END;
  112.                 END;
  113.             END;
  114.         END;
  115. END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement