Ciao , ho il seguente problema in C: dato un albero definito in questo modo:
codice:
typedef struct nodo
{
int info;
struct nodo *left1;
struct nodo *left2;
struct nodo *right1;
struct nodo *right2;
} nod;
devo verificare se l abero è un ABR rispetto alla somma dei nodi left1 e left2 e alla somma dei nodi right1 e right2.
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;
}
La funzione prinicipale è isBst, all interno richiamo visita inizializzando min al minimo intero, somma e ok a 0.
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