/* semplice  programma  di  utilizzo  della libreria  degli  alberi  binari
 * di  ricerca,  si  generano  dei  numeri casuali  e  li  si  inseriscono.
 * L'attraversamento inorder mi restituisce il tutto ordinato */

#include<iostream.h>
#include<stdlib.h>
#include<math.h>
#include"tree.h"


int main(int argc, char **argv){

 int num,ii;
 tipo_chiave valore_da_inserire;
 struct tnodo *albero, *tmp, *na;

 // inizializzazione 
 if(argc<2){
   cerr << "Utilizzo: " << argv[0] << " <numero valori da gestire>\n";
   exit(EXIT_FAILURE);
 }
 num=atoi(argv[1]);

 albero=na=NULL;

 // genero numeri casuali e li inserisco nell'albero 
 for(ii=num;ii>0;--ii){
   valore_da_inserire=sqrt(rand());
    tmp=crea_nodo();
    tmp->key=valore_da_inserire;
    na=tree_insert(albero, tmp);
    if(na!=NULL)albero=na;
  }
 // li stampo ordinati
 cout << "\n";
 inorder_r(albero);
 cout << "\n";
 tmp=tree_select(albero,num/2);
 cout << "Elemento "<< num/2 << "=" << tmp->key << endl;
 tmp=tree_select(albero,0);
 cout << "Elemento 0" << "=" << tmp->key << endl;
 // vediamo l'altezza dell'albero
 cout << "La dimensione dell'albero generato è: " << tree_size(albero) << endl;
 cout << "L'altezza dell'albero generato è: " << tree_height(albero) << endl;
 // alcune operazioni di test
 albero=tree_partition(albero,0);
 albero=tree_partition(albero,num/2);
 albero=tree_balance(albero);
 cout << "L'altezza dell'albero bilanciato è: " << tree_height(albero) << endl;
 return 0;
}