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