Ciao a tutti! Scusate se sto tempestando il forum, ma siccome domani ho l'esame sto cercando di fare il maggior numero di esercizi possibili
Allora adesso ho da fare questo....
Progettare un programma C che legge in preordine
da stdin un albero generico (cioe' non necessariamente binario)
etichettato con interi sui nodi e ritorna la somma dei valori
delle etichette x dell'albero che soddisfano
le seguenti condizioni:
1. x e' dispari;
2. il padre di x e' pari.
Il programma restituisce 0 se non ci sono nodi che soddisfano
le condizioni di cui sopra.
L'input da dare è di questo tipo:
(La prima colonna indica il numero di figli che ha il corrispondente nodo e la seconda colonna indica il nodo stesso)
3 122
1 457
0 698
0 23
2 724
1 456
0 678
2 346
0 777
0 998
Non capisco bene cosa vuol dire "il padre di x è pari". Ma x è un elemento non è un nodo

.
Io cmq ho provato a fare un codice del genere:
Codice:
#include <stdio.h>
#include <malloc.h>
struct nodo{
int val;
struct nodo *left;
struct nodo *right;
};
typedef struct nodo NODO;
typedef NODO *TREE;
TREE ReadTree(){
TREE t=(TREE)malloc(sizeof(TREE));
int nFigli, nVal, i;
scanf("%d %d", &nFigli, &nVal);
t->val=nVal;
t->left=NULL;
t->right=NULL;
for(i=0; i<nFigli; ++i){
t->left=ReadTree();
t->right=ReadTree();
}
return t;
}
int evaluateSum(TREE t){
int sum=0;
if(t==NULL)
return sum;
else
if((t->val)%2!=0)
sum+=t->val;
return sum+evaluateSum(t->left)+evaluateSum(t->right);
}
int main(void){
TREE albero=(TREE)malloc(sizeof(NODO));
albero=ReadTree();
printf("Sum: %d", evaluateSum(albero));
return 0;
}
Quando lo faccio partire però si blocca. Forse ho gestito male la parte relativa a quanti figli ha un nodo... boh. Voi che ne dite? Grazie.