{Terreno Antonio}
uses
   alberi,crt;

procedure menu;

begin
   clrscr;
   writeln('MENU'' OPERAZIONI:');
   writeln ('[ a ] --> inserisci elemento');
   writeln ('[ b ] --> leggi albero da tastiera');
   writeln ('[ c ] --> cancella x');
   writeln ('[ d ] --> dealloca albero ');
   writeln ('[ e ] --> trova elemento');
   writeln ('[ f ] --> altezza');
   writeln ('[ g ] --> stampa foglie');
   writeln ('[ h ] --> somma valori nodi');
   writeln ('[ i ] --> numero nodi');
   writeln ('[ l ] --> numero nodi fino al livello');
   writeln ('[ m ] --> numero nodi dopo il livello');
   writeln ('[ n ] --> numero nodi tra inf e sup');
   writeln ('[ o ] --> numero nodi al livello ');
   writeln ('[ p ] --> stampa albero');
   writeln ('[ q ] --> stampa anticipato');
   writeln ('[ r ] --> stampa posticipato');
   writeln ('[ s ] --> stampa simmetrico');
   writeln ('[ x ] --> Uscita');
end;

var
   opzione: char;
   albero: tipo_albero;
   elemento: tipo_elemento;
   inf,sup,liv: integer;

begin
   writeln;
   menu;
   writeln;
   write ('Scegliere l''operazione da compiere: ');
   readln (opzione);
   while not (opzione = 'x') do
      begin
         case opzione of
       'a':  begin
                write('elemento? ');
           readln(elemento);
           inserisci_elemento(albero,elemento);
             end;
       'b': leggi_da_tastiera(albero);
       'c':  begin
                write('elemento? ');
           readln(elemento);
           cancella_elemento(albero,elemento);
             end;
       'd': dealloca_albero(albero);
       'e':  begin
                write('elemento? ');
           readln(elemento);
           writeln(trova_elemento(elemento,albero));
             end;
       'f': writeln('altezza -> ',altezza(albero));
       'g': stampa_foglie(albero);
       'h': writeln(somma_valori_nodi(albero));
       'i': writeln(numero_nodi(albero));
       'l':  begin
                write('livello? ');
           readln(liv);
           writeln(num_nodi_fino(albero,liv));
             end;
       'm':  begin
                write('livello? ');
           readln(liv);
           writeln(num_nodi_dopo(albero,liv));
             end;
       'n':  begin
                write('inf? ');
           readln(inf);
           write('sup? ');
           readln(sup);
           writeln(num_nodi_tra(albero,inf,sup));
             end;
       'o':  begin
                write('livello? ');
           readln(liv);
           writeln(num_nodi_a(albero,liv));
             end;
       'p':  begin
                clrscr;
           stampa_albero(albero);
             end;
       'q': stampa_anticipato(albero);
       'r': stampa_posticipato(albero);
       's': stampa_simmetrico(albero);
       end;
       readln;
       menu;
       writeln;
       write ('Scegliere l''operazione da compiere: ');
       readln (opzione);
      end
end.