3- Árboles3.3 Árboles binarios

Implementación de árboles binarios en ADA (.adb) 
      with unchecked_deallocation;
      package body arbolesbin is
       
        procedure disponer is new unchecked_deallocation(nodo,arbin);

        procedure creaVacio(a:out arbin) is
        -- Post: a=aVacío
        begin

          a:=null;
        end creaVacio;

        procedure enraiza(e: in elemento; ai,ad:in arbin; a:out arbin) is
        -- Post: a=enraizar(e,ai,ad)
        -- NO COPIA ai NI ad
        begin

          a:=new nodo'(e,ai,ad,0);
          if ai/=null and ad/=null then
            a.altura:=1+integer'Max(ai.altura,ad.altura);
          elsif ai/=null then
            a.altura:=1+ai.altura;
          elsif ad/=null then
              a.altura:=1+ad.altura;
          end if;
        end enraiza;

        function raiz(a:arbin) return elemento is 
        -- Pre: not(vacío?(a))
        -- Post: raiz(a)=raíz(a)
        begin

          return(a.dato);
        end raiz;

        procedure subIzq(a:in arbin; ai:out arbin) is
        -- Pre: not(vacío?(a))
        -- Post: ai=subIzq(a)
        -- ATENCION: NO DUPLICA ai
        begin

          ai:= a.izq;
        end subIzq;

        procedure subDer(a:in arbin; ad:out arbin) is
        -- Pre: not(vacío?(a))
        -- Post: ad=subDer(a)
        -- ATENCION: NO DUPLICA ad
        begin

          ad:= a.der;
        end subDer;

        function esVacio(a:arbin) return boolean is
        -- Post: esVacio(a)=vacío?(a)
        begin

          return(a=null);
        end esVacio;

        function altura(a:arbin) return integer is
        -- Pre: not(vacío?(a))
        -- Post: altura(a)=altura(a)
        begin

          return(a.altura);
        end altura;

        procedure asignar(nuevo:out arbin; viejo:in arbin) is
        -- Duplica la representación del árbol viejo 
        -- guardándolo en nuevo.
        ai,ad:arbin;
        begin

          if viejo=null 
          then
            nuevo:=null;
          else
            asignar(ai,viejo.izq);
            asignar(ad,viejo.der);
            nuevo:=new nodo'(viejo.dato,ai,ad,viejo.altura);
          end if;
        end asignar;

        procedure liberar(a:in out arbin) is
        --  Libera la memoria dinámica accesible desde a, 
        -- quedando a vacío.
        begin

          if a/=null then
            liberar(a.izq);
            liberar(a.der);
            disponer(a);
            a:=null;
          end if;
        end liberar;


      end arbolesbin; 
       



  E.Mayordomo y K. Urzelai 
elvira at posta.unizar.es
karmelo at posta.unizar.es

Fecha de actualización: 5-9-01