L'errore sta nel fatto che chiami ricorsivamente la funzioen sui figli senza aver prima verificato se i figli esistono, causando un errore di memoria. Precisaemnte l'errore si ha nel caso in cui un nodo ha un solo figlio, in questo caso non è una foglia e quindi il secondo if non è eseguito e si passa alle chiamate ricorsive sui figli.
Una versione corretta è:
codice:bool esiste_cammino(nodo *t,int tot,int punteggio){ if (t == NULL){ return false; } if (foglia(t) && tot==punteggio) return true; else return false; bool l = false, r = false; if(t->left) l = esiste_cammino(t->left,tot+t->info,punteggio); if(t->right) r = esiste_cammino(t->right,tot+t->info,punteggio); return l || r; }

Rispondi quotando