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);
}