Devo risolvere questo problema per domani, ma sono piuttosto fuso (un pomeriggio per fare un programma sulle liste ) e non riesco a trovare una soluzione decente...

Si scriva una funzione NumeroNodi che, ricevendo in ingresso il puntatore alla radice di un albero binario e un intero positivo H, restituisce il numero di nodi NON foglia presenti al livello H nell'albero.
Come dovrei fare? la mia idea sarebbe di fare un ciclo che porti la radice al livello H desiderato... e poi da qui contare quanti nodi non sono foglie. E' giusto?
Ho provato a farlo così il codice, ma mi sa che è abominevole...

Il main è all'incirca così:
codice:
int H;
int tot;
cout<<"\n\n\tA che livello vuoi contare i nodi non foglia? ";
cin>> H;
tot=NumeroNodi(radice,H);
cout<<"\n\tAl livello "<<H<<" ci sono "<<tot<<" nodi non foglia";
E questa la funzione...

codice:
int NumeroNodi(treenode* p,int level)
{
	int cont=0, contsx=0, contdx=0;
	
	if(p!=NULL)
	{
		for(int i=0; i<=level; i++)
			p=p->dx;
		while(p->dx!=NULL || p->sx!=NULL)
			contdx++;

		for(int j=0; j<=level; j++)
			p=p->sx;
		while(p->dx!=NULL || p->sx!=NULL)
			contsx++;
	}
	
	cont=contdx+contsx;
	return cont;
}

Grazie dell'aiuto