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
con FirstChild il figlio e NextSibling come il fratello successivo.codice:void treePreorder(root) { if(root == null) return; <visita root> r = root.firstChild; while(r != null) { treePreorder(r); r = r.nextSibling; } }
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![]()