DEFINITION MODULE Arbol;

FROM TadItem IMPORT ITEM;

TYPE ARBOL;

PROCEDURE Crear(): ARBOL;
PROCEDURE Destruir(VAR a: ARBOL);

PROCEDURE EsVacio(a: ARBOL): BOOLEAN;
PROCEDURE Esta(a: ARBOL; x: ITEM):BOOLEAN;
(* pre: NOT EsVacio(a) *)
PROCEDURE Raiz(a: ARBOL): ITEM;
(* pre: NOT EsVacio(a) *)
PROCEDURE Izquierdo(a: ARBOL): ARBOL;
(* pre: NOT EsVacio(a) *)
PROCEDURE Derecho(a: ARBOL): ARBOL;

(* pre: NOT Esta(a, x) *)
PROCEDURE Insertar(VAR a: ARBOL;x: ITEM);
(* pre: Esta(a, x) *)
PROCEDURE Borrar(VAR a: ARBOL;x: ITEM);

PROCEDURE Copiar(VAR a1:ARBOL; a2:ARBOL);

TYPE TIPO_ERROR = <<a definir>>;

PROCEDURE Error(): TIPO_ERROR;

END Arbol.

