Ciao,
non conosco bene la sintassi del c++ ma posso dirti che c'è un errore nell'algoritmo per il conteggio delle chiavi che iniziano con 3.
Ciò che stai facendo al momento è contare quanti nodi adiacenti, partendo dalla root, hanno la chiave che inizia per 3.
Ovvero
se il nodo corrente ha la chiave che inizia con 3 allora:codice:if (raiz->clave[0]==3) count = 1 + cuentaDNI3Aux(raiz->izq) + cuentaDNI3Aux(raiz->der);
se i diretti figli hanno la chiave che inizia con 3 allora incremento di 1 il numero di occorrenze trovate nei figli
altrimenti interrompo la ricorsione e restiruisco solo le occorrenze trovate fino a quel momento.
Quindi se la chiave della root non inizia con 3 restituirai sempre 0.
Quello che devi fare è (in pseudocodice):
codice:contaOccorrenze(nodo corrente) int count; if(corrente == null){ count = 0; } else{ count = contaOccorrenze(figlio sinistro) + contaOccorrenze(figlio destro); if(chiave di corrente inizia con 3) count++; } return count;