Ciao a tutti!!
Non riesco a capire bene l'algoritmo ricorsivo che realizza la visita per livelli su un albero generale. So che si realizza tramite una coda. Assumendo che l'albero sia dichiarato in questo modo:
codice:
/* Albero n-ario */
struct gtree{
int dato;
struct node *primofiglio;
struct node *listafratelli;
};
typedef struct gtree *gtree;
L'algoritmo di visita è il seguente (tratto dal sito del mio prof):
codice:
/*Si trattava di usare una coda per mantenere traccia del livello dei nodi.
La coda poteva essere definita con un dato di tipo gtree. Assumiamo
quindi un tipo coda e assumiamo date tutte le routine standard su coda.*/
void visita (gtree t){
coda q;
gtree aux,tmp;
init(q);
if (t!=NULL) enqueue(q,t);
while(!empty(q)){
aux = dequeue(q);
printf("%d",aux->dato);
tmp = aux->lista_fratelli;
while(aux!=NULL){
enqueue(q,aux);
aux = aux->lista_fratelli;
}
if (aux->primo_figlio!=NULL)
enqueue(q,aux->primo_figlio);
}
}
Il problema è che non riesco a capire:
1 - Che ci faccio con tmp
2 - Come avviene passo passo la memorizzazione dei vari sottoalberi nella coda
Spero di essere stato chiaro. Grazie