Esercizio: scrivere una funzione che verifica se un albero contiene un certo elemento. Si assuma che i nodi siano interi: il prototipo è quindi:
int Presenza(TipoAlbero, int);
Soluzione: si tratta di implementare la stessa funzione ricorsiva che si è vista per gli alberi binari:
I primi due passi sono identici a quelli degli alberi binari. Per il terzo passo, occorre solo considerare che si tratta in effetti di fare la chiamata ricorsiva su ognuno dei sottoalberi, ritornando TRUE se qualche chiamata ritorna TRUE. L'ultimo passo si può quindi implementare come:
Chiaramente, si ritorna FALSE soltanto se nessuna delle chiamate ricorsive ha tornato TRUE. In altre parole, il return FALSE; va messo fuori dal ciclo (si esegue quindi soltanto se il return dentro il ciclo non viene mai eseguito).
int Presenza(TipoAlbero a, int e) { int i; if(a==NULL) return FALSE; if(a->info==e) return TRUE; for(i=0; i<a->numfigli; i++) if(Presenza(a->figli[i], e)) return TRUE; return FALSE; }