Ho cercato di implementare la ricorsione come mi è stato suggerito, il risultato è questo:
template <class T>
int UtilTree<T>::Even_leafs(BinAlberoC<T>, int &numfogpari){
typename BinAlberoC<T>::Nodo u;
T a;
/* costruzione popolamento dell'albero
tree.popolaBinAlbero();
cout << "\nStampa dell'albero inserito: \n";
tree.printBinAlbero(tree.binRadice());
cout << endl << endl;
*/
u = tree.binRadice();
cout << "foglie:" << numfogpari << endl;
if(u != -1){
if(tree.sinistroVuoto(u) && tree.destroVuoto(u)){
if(tree.leggiNodo(u)%2 == 0)
numfogpari++;
}
if(!tree.sinistroVuoto(u)){
Even_leafs(tree.figlioSinistro(u), numfogpari);
}
if(!tree.destroVuoto(u)){
Even_leafs(tree.figlioDestro(u), numfogpari);
}
}
cout << "Il numero totale di foglie con valore pari e': " << numfogpari << endl;
}
non funziona come dovrebbe perchè la variabile numfogpari mi da come valore 20 a prescindere dal numero di foglie.
per aiutare la comprensione della funzione vi scrivo cosa fanno le funzioni:
BinAlberoC: richiama la libreria che contiene tutte le specifiche dell'albero.
BinRadice: è il nodo della radice.
sinistroVuoto & destroVuoto: restituiscono un bool se il nodo "u" ha figli o meno.
leggiNodo: legge il contenuto del nodo "u".
Mi aiutate a risolvere questo problema? devo sempre trovare le foglie il cui valore è pari.
Grazie mille.