Infatti è sbagliata, con quella funzione sommi al più i nodi del livello 1.
Io la riscriverei semplicemente così:
codice:int somma_livelli_dispari(ptree t, int liv) { if (!t) return 0; return somma_livelli_dispari(t->left, liv+1) + somma_livelli_dispari(t->right, liv+1) + (liv%2 ? t->item : 0); }