3- Árboles3.2 Árboles generales

Implementación de árboles generales en ADA (.ads)
    generic
      type elemento is private;
    package arboles is
      type arbol is limited private;
      type bosque is limited private;
      procedure creaVacio(b:out bosque);
      -- Post: b=bVacío
      procedure anadeDch(b:in out bosque; a:in arbol);
      -- Pre: b=b0
      -- Post: b=+dch(b0,a)
      -- NO HACE COPIA DE a
      function long(b:in bosque) return integer;
      -- Post: long(b)=long(b)
      procedure observa(b:in bosque; i:in integer; a:out arbol);
      -- Pre: 1<=i<=long(b) 
      -- Post: a=b[i]
      -- HACE COPIA
      function altBosque(b:bosque) return integer; 
      -- Post: altBosque(b)=altBosque(b)
      procedure enraizar(e:in elemento; b:in bosque; a:out arbol);
      -- Post: a=enraizar(e,b)
      -- NO HACE COPIA DE b
      function raiz(a:arbol) return elemento;
      -- Post: raiz(a)=raíz(a)
      procedure subarbol(a:in arbol; i:in integer;sa:out arbol);
      -- Pre: 1<=i<=numHijosRaiz(a) 
      -- Post: sa=subárbol(a,i)
      -- HACE COPIA
      function numHijos(a:arbol) return integer;
      -- Post: numHijos(a)=numHijosRaiz(a)
      function esHoja(a:arbol) return boolean;
      -- Post: esHoja(a)=hoja?(a)
      function altArbol(a:arbol) return integer; 
      -- Post: altArbol(a)=altÁrbol(a)
      procedure elBosque(a:in arbol; b:out bosque);
      -- Guarda en b la lista de subárboles de a.
      -- No actualiza b.ultimo
      -- No duplica
      procedure asignaBosque(nuevo:out bosque; viejo:in bosque);
      -- Duplica la representación del bosque viejo
      -- guardándolo en nuevo.
      procedure liberaBosque(b:in out bosque);
      -- Libera la memoria dinámica accesible
      -- desde b, quedando b vacío.
      procedure asignaArbol(nuevo:out arbol;viejo:in arbol);
      -- Duplica la representación del árbol viejo 
      -- guardándolo en nuevo.
      procedure liberaArbol(a:in out arbol);
      -- Libera la memoria dinámica accesible 
      -- desde a.
      private
        type nodo;
        type arbol is access nodo;
        type nodo is
          record
            dato:elemento;
            primogenito,sigHermano:arbol;
            altura,numHijos:integer;
          end record;
        type bosque is
          record
            primArbol,ultArbol:arbol;
            long,altura:integer;
          end record;
    end arboles; 


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

Fecha de actualización: 4-9-01