Ciao ri-provo a darti una mano

La struttura dati albero è definita da un nodo radice e da un numero arbitrario 'n' di figli.
I comuni alberi binari di ricerca sono un caso particolari di alberi n-ari.

Un albero n-ario si può rappresentare tramite una lista collegata

Tra le operazioni comuni di un albero, troviamo i diversi tipi di visite.

Quella che ti ho suggerito è la visita preordine.

In pratica dato un nodo v :

1. visita v
2. visita i sotto-alberi aventi come radice i figli di v , da sinistra verso destra

codice:
void treePreorder(root) {
   if(root == null) return;

   <visita root>
   r = root.firstChild;  
    while(r != null) {
     treePreorder(r);
     r = r.nextSibling;
   }
}
con FirstChild il figlio e NextSibling come il fratello successivo.

Ricorda che:
1. Un albero vuoto è sempre un albero.
2. esiste un albero con un solo nodo (radice)
3. Ogni nodo interno dell'albero è esso stesso un sotto-albero

La procedura ricorsiva prende come parametro il nodo da visitare (nel primo caso la radice dell'albero).

Se si è arrivati ad un albero vuoto non si fa nulla, altrimenti visita il nodo in questione (per esempio stampa a video l' informazione in esso contenuta).

Successivamente si passa al figlio (se esiste).. e si richiama ricorsivamente la procedura (prima iterazione del ciclo while ).
Si va quindi in profondità fino ad arrivare alla fine dell'albero (in quel caso r sarà NULL).

In questo caso per effetto della ricorsione, si torna la nodo visitato precedentemente e si eseguono ulteriori iterazioni del ciclo While per visitare tutti i fratelli, ma per ogni fratello (esso stesso un albero) bisogna effettuare di nuovo la visita (così come hai fatto per ogni figlio).

Quindi per ogni iterazione del ciclo si esegue ricorsivamente una visita di ogni albero.
La prima iterazione per il primo figlio... le successive per i fratelli.

Devi cercare di capire bene la struttura e la logica della ricorsione.

Spero di averti aiutato

Ciao