Ciao
allora l'errore stà nella variabile sum perche la definisci all' interno della funzione.
cosi ad ogni richiamo della funzione la variabile viene reinizializzata a 0 cosi quando chiami la funzione con l'ultimo link dell'alberosum vale 0 e quindi te lo restituisce.
io ti consiglio di fare la funzione nel seguente modo:
void SumEven(struct node *ptr1,int &sum)
{
if(ptr1!=NULL)
{
if((ptr1->data)%2==0) { printf("%d\n", ptr1->data); sum++; }
SumEven(ptr1->left,sum);
SumEven(ptr1->right,sum);
}
}
di conseguenza quando chiamerai la funzione, nel main, lo farai nel seguente modo:
int sum=0;
SumEven(root,sum);
printf("il numero di nodi contenenti cifre pari e': %d\n", sum);
return 0;