/* 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<stdio.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 */
 num=atoi(argv[1]);
 srand(num);
 albero=na=NULL;

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