PDA

Visualizza la versione completa : [C] Aiuto per funzione


Polco
08-03-2008, 18:51
Ciao a tutti, ho bisogno una mano per scrivere una funzione in C che mi sta dando non pochi grattacapi.
Io ho due tipi di dati cosģ definiti:


typedef struct nodo * punt;
typedef struct nodo{
char carattere;
int array[N];
punt left;
punt right;
}nodo;

Ho bisogno di una funzione che riceve in ingresso un puntatore punt al primo nodo dell'albero e riempa gli array in questo modo:
Consideriamo il nodo in testa. Questo nodo deve avere l'array vuoto. I puntatori left e right di questo nodo punteranno ad altri due nodi (o magari uno od entrambi i puntatori posso puntare a null, le caratteristiche dell'albero le descrivo alla fine di questo post).
Nell'array del nodo puntato da right bisognerą inserire tutto il contenuto dell'array del nodo precedente (che essendo il primo era vuoto) e aggiungere nel primo spazio vuoto dell'array uno 0 mentre nell'array del nodo raggiunto da left bisognerą sempre copiare il contenuto dell'array del nodo precedente e poi inserie nel primo spazio vuoto di questo array un 1. Si supponga che la dimensione dell'array sia sufficiente a contenere tutti gli elementi necessari per arrivare ai nodi foglia. Infine la funzione, arrivata ai nodi foglia, deve stampare il carattere seguito da tutti gli elementi dell'array... Altra nota: l'albero non č nč simmetrico, nč binario, nč altro... non ha una struttura particolare, deve andare bene per qualsiasi tipo di albero. Ci sto impazzendo da un paio di giorni, riuscite a darmi una mano?
Grazie

oregon
08-03-2008, 19:02
E in questi giorni cosa hai scritto ... si deve pur partire da qualcosa ...

Polco
08-03-2008, 19:31
punt funzione(punt t){
int n,i;
for (n=0; array[n]!='\n'; n++){
};
if ((t->left->left==NULL)&&(t->left->right==NULL)){
for (i=0; i<n; i++){
t->left->array[i]=t->array[i];
}
i++;
t->left->array[i]=1;
printf("\n%c: ", t->left->carattere);
for(n=0; n<=i; n++){
printf("%d", t->left->array[n]);
};
return t;
}
if((t->right->left==NULL)&&(t->right->right==NULL)){
printf("\n%c: ", t->right->carattere);
for (i=0; i<n; i++){
t->right->array[i]=t->array[i];
}
i++;
t->right->array[i]=0;
for(n=0; n<=i; n++){
printf("%d", t->right->array[n]);
};
return t;
}
else{
t->left->array[i]=1;
t->right->array[i]=0;
t=funzione(t->left);
if (t->left->left==NULL)
return funzione(t->right);
else
return funzione(t->left);
}
}

Ma diciamo che č un obrobrio... il punto č che č proprio sbagliato il modo di affrontare il problema, non riesco a capire come percorrere tutto l'albero....

Loading