Buonasera a tutti,
allora ho un metodo che mi stampa i nodi di un albero ad un dato livello n, questo è il codice:
entrambi i metodi si trovano nella classe principale dell'albero. La particolarità di questa classe binaryTree e che al suo interno è definita la classe Node private, relativa ai nodi.
Ora volendo mettere in un array i nodi presenti adl livello n dell'albero come si potrebbe fare?
C'ho provato ma non riesco a far avanzare un indice pos che mi scorre le posizioni dell'array.
Qualcuno potrebbe aiutarmi ?
Ho fatto questo e funzia, cmq attendo eventuali suggerimenti e consigli, nell'eventualità ci fosse qualche incoerenza con la ricorsione:
allora ho un metodo che mi stampa i nodi di un albero ad un dato livello n, questo è il codice:
Codice:
public void stampaNodi(int i) {
stampaNodi(i, root, 0);
}
public void stampaNodi(int i, Node node, int livello) {
if (node == null)
return;
else {
if (livello == i)
System.out.print(node.element + ", ");
stampaNodi(i, node.left, livello + 1);
stampaNodi(i, node.right, livello + 1);
}
}
entrambi i metodi si trovano nella classe principale dell'albero. La particolarità di questa classe binaryTree e che al suo interno è definita la classe Node private, relativa ai nodi.
Ora volendo mettere in un array i nodi presenti adl livello n dell'albero come si potrebbe fare?
C'ho provato ma non riesco a far avanzare un indice pos che mi scorre le posizioni dell'array.
Qualcuno potrebbe aiutarmi ?
Ho fatto questo e funzia, cmq attendo eventuali suggerimenti e consigli, nell'eventualità ci fosse qualche incoerenza con la ricorsione:
Codice:
public int[] arrayLevel(int i) {
// Recupero la dimensione dell'array richiamando una funzione che restituisce il numero
// di nodi presenti al livello i dell'albero
int[] arrayNode = new int[dimensioneArray(i, root, 0)];
return arrayLevelNode(i, root, arrayNode, 0, 0);
}
public int[] arrayLevelNode(int i, Node node, int[] array, int pos, int livello) {
if (node != null) {
if (pos < array.length && livello == i)
array[pos] = node.element;
arrayLevelNode(i, node.left, array, pos++, livello + 1);
arrayLevelNode(i, node.right, array, pos++, livello + 1);
}
return array;
}
private int dimensioneArray(int i, Node node, int livello) {
if (node == null)
return 0;
else {
if (livello == i)
return 1;
else
return dimensioneArray(i, node.left, livello + 1) + dimensioneArray(i, node.right, livello + 1);
}
}
Ultima modifica: