[Generico] alberi N-ari
Salve, ho dei dubbi sugli alberi N-ari, con struttura primo figlio - fratello destro, in particolare su questo esercizio:
Implementare la funzione
Devo implementare in linguaggio C. La mia soluzione è questa:
sono però quasi sicuro di aver sbagliato perchè secondo me dovrei scorrere con un while, ad esempio in questo modo,
Ma onestamente non ho ben capito come applicarlo. Potreste gentilmente aiutarmi a capire? Grazie mille in anticipo.
Implementare la funzione
int contaFratelli(Ntree T, stringa S)che dato un albero di grado arbitrario T e una stringa S, conti quanti fratelli ha il nodo contenente S. Nel caso in cui T sia vuoto oppure non esiste un nodo contenente S, la funzione ritornerà 0.
Devo implementare in linguaggio C. La mia soluzione è questa:
typedef struct elem2 { stringa nome; struct elem2* primoFiglio; struct elem2* fratello; } nodo_alberoN; typedef nodo_alberoN* Ntree;
int contaFratelli(Ntree T,stringa s) { if(T==NULL){ return 0; } else{ if(strcmp(T->primoFiglio->info,s)==0){ return 1 + contaFratelli(T->fratello); } return contaFratelli(T->primoFiglio,s) + contaFratelli(T->fratello,s); } }
sono però quasi sicuro di aver sbagliato perchè secondo me dovrei scorrere con un while, ad esempio in questo modo,
Ntree temp = T->primoFiglio; while(temp){ : : temp= temp->fratello; }
Ma onestamente non ho ben capito come applicarlo. Potreste gentilmente aiutarmi a capire? Grazie mille in anticipo.
Risposte
Esiste la possibilità di avere anche il caso in cui ci siano più nodi contenenti S. Non esiste infatti alcuna limitazione in tal senso all'interno dell'esercizio. In ogni caso devi per prima cosa trovare il nodo contenente S e dopo averlo trovato usare il ciclo che hai scritto per contare i suoi fratelli.
Innanzitutto grazie per la tua risposta.
Cercando si seguire il tuo consiglio ho scritto questo codice:
La funzione FindS(T,s) l' ho scritta a parte e cerca la stringa s all' interno dell' albero. Credi che questa sia una buona soluzione? Grazie mille in anticipo.
Cercando si seguire il tuo consiglio ho scritto questo codice:
int contaFratelli(Ntree T, stringa s) { if(T==NULL){ return 0; }else{ if(FindS(T,s)){ Ntree temp=T->primoFiglio; while(temp){ temp=temp->fratello; } if(temp==NULL){ return 1 + contaFratelli(T->primoFiglio) + contaFratelli(T->fratello); } return contaFratelli(T->primoFiglio) + contaFratelli(T->fratello);
La funzione FindS(T,s) l' ho scritta a parte e cerca la stringa s all' interno dell' albero. Credi che questa sia una buona soluzione? Grazie mille in anticipo.