-- AUTOR: Elvira Mayordomo Cámara
-- PROYECTO: módulo de declaración del TAD arboles binarios
-- FICHERO: arbolesbin.ads
-- FECHA: 22-10-02, basado en el libro de Javier Campos (ver bibliografía)
-- Especificación en fichero aparte

generic
type elemento is private;
package arbolesbin is
type arbin is limited private;
-- coste en memoria: un árbol de n nodos ocupa O(n)
procedure creaVacio(a:out arbin);
-- Post: a=aVacío
-- coste en tiempo O(1)
procedure enraiza(e: in elemento; ai,ad:in arbin; a:out arbin);
-- Post: a=enraizar(e,ai,ad)
-- NO COPIA ai NI ad
-- coste en tiempo O(1)
function raiz(a:arbin) return elemento;
-- Pre: not(esvacío(a))
-- Post: raiz(a)=raíz(a)
-- coste en tiempo O(1)
procedure subIzq(a:in arbin; ai:out arbin);
-- Pre: not(esvacío(a))
-- Post: ai=subIzq(a)
-- NO DUPLICA ai
-- coste en tiempo O(1)
procedure subDer(a:in arbin; ad:out arbin);
-- Pre: not(esvacío(a))
-- Post: ad=subDer(a)
-- NO DUPLICA ad
-- coste en tiempo O(1)
function esVacio(a:arbin) return boolean;
-- Post: esVacio(a)=esvacío(a)
-- coste en tiempo O(1)
function altura(a:arbin) return integer;
-- Post: altura(a)=altura(a)
-- coste en tiempo O(1)
procedure asignar(nuevo:out arbin; viejo:in arbin);
-- Duplica la representación del árbol viejo guardándolo en 
-- nuevo.
-- coste en tiempo: para un árbol de n nodos tarda O(n)
procedure liberar(a:in out arbin);
--  Libera la memoria dinámica accesible desde a, quedando a 
-- vacío.
-- coste en tiempo: para un árbol de n nodos tarda O(n)

private
type nodo;
type arbin is access nodo;
type nodo is
record
	dato:elemento;
	izq,der:arbin;
	altura:integer;
	end record;
end arbolesbin; 


syntax highlighted by Code2HTML, v. 0.9.1