albero
Inviato: 25 gen 2007, 22:22
Salve a tutti, ho un problema di programmazione in c.
l'esercizio è il seguente:
è dato un albero binario i cui nodi contengono valori interi positivi. Scrivere una funzione ricorsiva che dato il puntatore a un elemento di tipo albero 'a' e un valore intero positivo 'val' restituisce -1 se esiste almeno un sottoalbero di 'a' la cui somma degli elementi è pari a 'val' e restituisce un numero positivo altrimenti.
Qui c'è una bozza di quello a cui avevo pensato io:
int sottoalbero (*albero a, int val){
int somma1=0;
int somma2=0;
if(a->sin !=null){
somma1= somma1 + sottoalbero (a->sin, val - a->sin->valore);
if (somma1 ==val) return -1;
}
if(a->des!=null){
somma2= somma2 + sottoalbero (a->des, val - a->des->valore);
if (somma2 ==val) return -1;
}
if((somma1+somma2+a->val)==val) return -1;
return (somma1+somma2+a-val);
}
C'è però qualcosa che non torna. Qualcuno può indirizzarmi sulla strada giusta?
l'esercizio è il seguente:
è dato un albero binario i cui nodi contengono valori interi positivi. Scrivere una funzione ricorsiva che dato il puntatore a un elemento di tipo albero 'a' e un valore intero positivo 'val' restituisce -1 se esiste almeno un sottoalbero di 'a' la cui somma degli elementi è pari a 'val' e restituisce un numero positivo altrimenti.
Qui c'è una bozza di quello a cui avevo pensato io:
int sottoalbero (*albero a, int val){
int somma1=0;
int somma2=0;
if(a->sin !=null){
somma1= somma1 + sottoalbero (a->sin, val - a->sin->valore);
if (somma1 ==val) return -1;
}
if(a->des!=null){
somma2= somma2 + sottoalbero (a->des, val - a->des->valore);
if (somma2 ==val) return -1;
}
if((somma1+somma2+a->val)==val) return -1;
return (somma1+somma2+a-val);
}
C'è però qualcosa che non torna. Qualcuno può indirizzarmi sulla strada giusta?