Guten Abend,
ich habe soeben dieses Forum entdeckt und möchte mich direkt mit einer Frage zur Optimierung meiner bisherigen Lösung an euch wenden:
Es geht um das Ausgeben eines Binären Baumes in richtiger (sortierter) Reihenfolge. Die Baumstruktur ist bereits vorhanden, sprich es geht nicht um das Einfügen oder Umändern der einzelnen Knoten des Binärbaumes, sondern wirklich nur um deren Ausgabe (Inorder). Meine bisherige Lösung funktioniert soweit, jedoch ist diese lediglich nur auf die in der Aufgabe beschriebenen 7 Knoten mit Werten von 1 bis 7 anwendbar und nicht flexibel auf beispielsweise negative Zahlen. Zudem soll die Anzahl der Knoten elegant ohne weitere globale Variablen außerhalb der Klasse ausgegeben werden, was bei mir lediglich mit einer globalen Variable und einem Zähler funktioniert.
Hat jemand Vorschläge zur Optimierung meiner Aufgabe?
ich habe soeben dieses Forum entdeckt und möchte mich direkt mit einer Frage zur Optimierung meiner bisherigen Lösung an euch wenden:
Es geht um das Ausgeben eines Binären Baumes in richtiger (sortierter) Reihenfolge. Die Baumstruktur ist bereits vorhanden, sprich es geht nicht um das Einfügen oder Umändern der einzelnen Knoten des Binärbaumes, sondern wirklich nur um deren Ausgabe (Inorder). Meine bisherige Lösung funktioniert soweit, jedoch ist diese lediglich nur auf die in der Aufgabe beschriebenen 7 Knoten mit Werten von 1 bis 7 anwendbar und nicht flexibel auf beispielsweise negative Zahlen. Zudem soll die Anzahl der Knoten elegant ohne weitere globale Variablen außerhalb der Klasse ausgegeben werden, was bei mir lediglich mit einer globalen Variable und einem Zähler funktioniert.
Hat jemand Vorschläge zur Optimierung meiner Aufgabe?
Code:
import java.util.Arrays;
public class Aufgabe36 {
/**
* Methode binSort wie in der Aufgabenstellung beschrieben
*
* @param node der Wurzelknoten des betrachteten (Teil-)Baums
* @param a int-array, in dem die Werte der Knoten abgelegt werden sollen (Achtung: Array muss so viele Eintraege haben wie Knoten im Baum sind)
* @param pos aktuelle Array-Position (0 fuer Aufruf mit der Wurzel des gesamten Baums)
* @return Anzahl Knoten des Baums
*/
int knotenanzahl = 0;
public int binSort(BinTreeNode node,int[] a,int pos) {
//System.out.println(pos);
knotenanzahl++;
pos = node.getValue()-1;
if(node.getLeftChild() != null){
binSort(node.getLeftChild(), a, pos);
}
a[pos] = node.getValue();
if(node.getRightChild() != null){
binSort(node.getRightChild(), a, pos);
}
return knotenanzahl;
}
/**
* Main-Methode zum Testen der Methode binSort
*/
public static void main(String[] args) {
// Teste Implementierung
// 1. Erzeuge einfachen Baum
BinTreeNode root = new BinTreeNode(4);
root.setLeftChild(new BinTreeNode(2));
root.getLeftChild().setRightChild(new BinTreeNode(3));
root.getLeftChild().setLeftChild(new BinTreeNode(1));
root.setRightChild(new BinTreeNode(6));
root.getRightChild().setRightChild(new BinTreeNode(7));
root.getRightChild().setLeftChild(new BinTreeNode(5));
// 2. Erstelle Array
int result[] = new int[7];
// 3. Erstelle Aufgabe36-Objekt und rufe binSort(...) auf
Aufgabe36 myAufgabe = new Aufgabe36();
int numNodes = myAufgabe.binSort(root, result, 0);
System.out.println("Anzahl Knoten: " + numNodes);
System.out.println(Arrays.toString(result));
}
}
public class BinTreeNode {
public BinTreeNode(int value) {
// setze den Wert des Knotens
this.value = value;
}
/* getter und setter */
public BinTreeNode getLeftChild() { return leftChild; }
public void setLeftChild(BinTreeNode left) { leftChild = left; }
public BinTreeNode getRightChild() { return rightChild; }
public void setRightChild(BinTreeNode right) { rightChild = right; }
public int getValue() { return value; }
/* member attribute */
private int value;
private BinTreeNode leftChild;
private BinTreeNode rightChild;
}