ma se la foglia è null perchè deve tornare 1?

gli elementi li conto con il + 1 di
"return num_elem(t->sx) + num_elem(t->dx) + 1;"



prendi il nodo D del tuo esempio

le sue foglie sono null... ovvero non ha foglie, ovvero è egli stesso una foglia, giusto? quindi dovrebbe tornare 1, e infatti torna 1

return num_elem(t->sx) + num_elem(t->dx) + 1;

in italiano: Ritorna il numero di nodi a sinistra (zero) + il numero di nodi a destra (zero) + te stesso (1) = 1

quindi al suo chiamante, cioè B ritornerà 1.