Originariamente inviato da desa
Eviterei di portarmi dietro nel processo di esplorazione dell'albero l'apertura e la chiusura degli streams su file: apri uno stream prima di iniziare la visita e chiudilo quando l'hai finita. Se non vuoi memorizzare il FileWriter in un attributo puoi comunicarlo sotto forma di parametro ai metodi coinvolti.
Il tuo metodo ora è ricorsivo, ma non nel modo corretto: perchè ogni volta il livello riparte da -1? Lo devi ricevere come parametro dal metodo chiamante e - per tutta l'esecuzione del metodo - fare riferimento a quello.
Prova a rivedere la ricorsione... in caso di problemi possiamo tornare a discuterne
codice:
public void scriviNelFile(File name,int nodo,int livello) {
try {
FileOutputStream file = new FileOutputStream(name);
PrintStream Output = new PrintStream(file);
Output.println("(nodo, livello)");
Output.println("("+nodo+","+livello+")");
}
catch(FileNotFoundException e) {
System.out.println("Errore scrittura sul file.txt!!"+e);
}
}
public void scriviLivelloNodi(File name) {
scriviLivelloNodi(root,name,0,-1);
}
public void scriviLivelloNodi(BinaryNode node,File name,int nodo, int livello) {
// Passo 1: apri il file in scrittura
try {
//apro file in scrittura
FileWriter prova = new FileWriter(name);
// Passo 2: chiama un opportuno metodo di supporto (che dovrai implementare) che si occupa di scrivere
// nel file i dati richiesti per ciascun nodo dell'albero
if(node.getLeftChild()!=null || node.getRightChild()!=null) {
livello++;
nodo=node.getDato();
scriviNelFile(name, nodo,livello);
scriviLivelloNodi(node.getLeftChild(),name,nodo,livello);
scriviLivelloNodi(node.getRightChild(),name,nodo,livello);
}
//Passo 3: chiudi il file
prova.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
Ho sistemato il livello mettendolo come parametro al metodo. però non so come fare la prima parte dove dici:
Originariamente inviato da desa Eviterei di portarmi dietro nel processo di esplorazione dell'albero l'apertura e la chiusura degli streams su file: apri uno stream prima di iniziare la visita e chiudilo quando l'hai finita. Se non vuoi memorizzare il FileWriter in un attributo puoi comunicarlo sotto forma di parametro ai metodi coinvolti.