Ciao, la logica è piuttosto semplice: per ogni nodo stampi quel nodo, poi il sottoalbero sinistro, poi quello destro.
Ti posto il codice:
codice:
import java.util.ArrayList;
public class StampaAlbero {
public static void stampaSottoalberoSx(ArrayList<Character> lista, int n) {
if(2*n+1 < lista.size()) {
System.out.println(lista.get(2*n+1));
stampaSottoalberoSx(lista, 2*n+1);
stampaSottoalberoDx(lista, 2*n+1);
}
else return;
}
public static void stampaSottoalberoDx(ArrayList<Character> lista, int n) {
if(2*n+2 < lista.size()) {
System.out.println(lista.get(2*n+2));
stampaSottoalberoSx(lista, 2*n+2);
stampaSottoalberoDx(lista, 2*n+2);
}
else return;
}
public static void stampaAlbero(ArrayList<Character> lista) {
System.out.println(lista.get(0));
stampaSottoalberoSx(lista, 0);
stampaSottoalberoDx(lista, 0);
}
public static void main(String[] args) {
ArrayList<Character> albero = new ArrayList<Character>();
albero.add('f');
albero.add('a');
albero.add('c');
albero.add('d');
albero.add('b');
albero.add('e');
stampaAlbero(albero);
}
}
Volendo si potrebbe rendere l'ArrayList globale anziché continuare a passarla. Vedi tu.