Functions e procedures em arvore binária / PASCAL

Bom dia pessoal.
Estou com problemas em executar functions e procedures desse programa de arvores binárias.
Não sei o modo correto de fazer o menu para isso.
Se alguem souber me corrija.

Obs:se alguem tiver um procedure ou function de remover os nós da arvore também ajudará. :-o

[code]program arv_bin;

uses crt;

type ref = ^no;
no = record
key:integer;
direita,esquerda :ref;
end;

var
n:integer;
raiz:ref;
op:char;

{------------------------------------}

function arvore(n:integer):ref;
var
novoNo:ref;
x,noEsq,noDir:integer;

begin
if n=0 then
begin
arvore:=nil
end
else
begin
noEsq:=n div 2;
noDir:=n-noEsq-1;
readln(x);
new(novoNo);
begin
novoNo^.key:=x;
novoNo^.esquerda:=arvore(noEsq);
novoNo^.direita:=arvore(noDir);
end;
arvore:=novoNo;
end;
end;

{-----------------------------------------}

{procedure preOrdem(t:ref);
begin
if t<>nil then
begin
visita(t);
preOrdem(t^.esquerda);
preOrdem(t^.direita);
end;
end;}

{----------------------------------------------------------------------}

procedure listaArvore(t:ref;h:integer);
var
i:integer;

begin
if t<>nil then
begin
listaArvore(t^.direita,h+1);
for i:=1 to h do write(’ ');
begin
writeln(t^.key);
listaArvore(t^.esquerda,h+1);
end;
end;
end;

{----------------------------------------------------------------------}

procedure menu;
begin
writeln;
writeln(‘i: insere’);
writeln(‘r: remove’);
writeln(‘l: listar’);
writeln(‘f: fim’);
readln(op);
end;

{----------------------------------------------------------------------}

begin
menu;
while(op in[‘i’,‘r’,‘l’,‘f’])do
begin
clrscr;
if op = ‘i’ then
read(arvore);
if op = ‘r’ then
if op = ‘l’ then
listarArvore(key);
if op = ‘f’ then
break;
menu;
end;
writeln(‘tecle algo para encerrar’);
readkey;
end.[/code]