Questa dovrebbe essere corretta:
Codice PHP:
int inserisci(tree & t, elemento it){
if (t == NULL){
t = new nodo;
t -> item = it;
return 1;
}
if(it > t -> item)
return inserisci(t -> right,it);
if(it < t -> item)
return inserisci(t -> left,it);
return 1;
}
Nota che poichč gli elementi sono di tipo void *, facendo i confronti stai semplicemente confrontatno di puntatori, non i valori puntati, il che non ha molto senso. Per fare queste funzioni generiche hai bisogno di passare tra gli argomenti anche una funzione di confronto che fa il confronto vero e proprio e che sarą implementata diversamente di volta in volta in base al tipo effettivo degli elementi. Lo stesso vale per la stampa. La funzione dovrebbe allora essere:
Codice PHP:
int inserisci(tree & t, elemento it, int (*confronta)(void *, void *)){
if (t == NULL){
t = new nodo;
t -> item = it;
return 1;
}
if(confronta(it, t -> item) == 1)
return inserisci(t -> right,it);
if(confronta(it, t -> item) == -1)
return inserisci(t -> left,it);
return 1;
}
il paramentro "confronta" č un puntatore ad una funzione che prende due void* e restituisce 1, -1 o zero rispettivamente se il primo č maggiore, minore o uguale al secondo. Cosi ad esempio, se fai un albero di interi puoi definire una funzione
Codice PHP:
int confronta_interi(void * a, void * b){
if(*a > *b)
return 1;
if(*a < *b)
return -1;
return 0;
}
e poi chiamare la funzione di inserimento cosi:
inserisci(t, it, confronta_interi);
se invece fai un albero di puntatori ad un altro tipo di oggetti, ad esempio delle stringhe che vanno confrontate lessicograficamente, devi definire una funzione confronta_stringhe da passare ad inserisci. Analogamente devi creare delle funzioni diverse per la stampa di un singolo elemento, ad esempio stampa_intero o stampa_stringhe, e che saranno passate come parametro alla funzione di stampa dell'albero.