Ciao , ho il seguente problema in C: dato un albero definito in questo modo:
devo verificare se l abero è un ABR rispetto alla somma dei nodi left1 e left2 e alla somma dei nodi right1 e right2.codice:typedef struct nodo { int info; struct nodo *left1; struct nodo *left2; struct nodo *right1; struct nodo *right2; } nod;
La funzione prinicipale è isBst, all interno richiamo visita inizializzando min al minimo intero, somma e ok a 0.codice:void visita(nod *radice, int *min, int *risp , int *somma) { if (radice != NULL) { visita(radice->left1,min,risp,somma); *somma= *somma+radice->info; visita(radice->left2,min,risp,somma); if (radice->info != *somma) *somma=radice->info+ *somma; if (*min < *somma) { *min = *somma; printf("\n aggiorniamo min %d \n",*min); } else { *risp = 1; printf("aggiorniamo risp %d \n",*risp); } somma=0; visita(radice->right1,min,risp,somma); visita(radice->right2,min,risp,somma); } } int isBst(nod *root)/*0 se abr 1 NO - FUNZIONE PRINCIPALE- */ { int min = INT_MIN; int ok = 0; int somma = 0; visita(root,&min,&ok,&somma); printf("valore di ok e' %d \n",ok); if (ok == 0) return 0; else return 1; }
In output mi restituisce sempre 1 cioe che non è un abr. Ragazzi non so piu come fare![]()
Spero che qualcuno mi aiuti, grazie in anticipo

Rispondi quotando