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.