Alberi binari

SolidSnake4

Utente Attivo
23 Ott 2007
505
0
0
Buonasera a tutti,
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:

Discussioni simili