Wenn es um binäre Bäume geht, gibt es mehrere verschiedene Arten von Durchläufen, die rekursiv durchgeführt werden können. Sie werden in der Reihenfolge geschrieben, in der sie referenziert und dann besucht wurden (L = linkes Kind, V = besuche diesen Knoten, R = rechtes Kind).
- In-Order Traversal (LVR)
- Reihenfolge umkehren Traversal (RVL)
- Vorordnungsdurchquerung (VLR)
- Nachordnungsdurchquerung (LRV)
Ihr Code leistungsfähiger zu sein scheint die Postorder Traversal Methode, aber Sie bekommen ein paar Dinge durcheinander. Zuerst ist der Knoten, was Sie durchlaufen möchten; Die Daten ist, was Sie besuchen möchten. Zweitens haben Sie keinen Grund, den Knoten selbst zurückzuliefern, so wie dies implementiert ist. Ihr Code erlaubt keine Bedingung zu sagen: "Ich bin auf der Suche nach dieser bestimmte Daten, haben Sie es Mr. Node @ 0xdeadbeef?", Die mit einer Art von zusätzlichen Suchparameter gefunden werden würde.
Ein akademischer BST-Traversal druckt nur die Knoten selbst. Wenn Sie eine Suchfunktionalität hinzufügen möchten, ist dies nur ein weiterer Parameter sowie eine zusätzliche Überprüfung für den richtigen Knoten.
Hier ist ein Ausschnitt:
// Academic
public void traverse (Node root){ // Each child of a tree is a root of its subtree.
if (root.left != null){
traverse (root.left);
}
System.out.println(root.data);
if (root.right != null){
traverse (root.right);
}
}
// Search with a valid node returned, assuming int
public Node traverse (Node root, int data){ // What data are you looking for again?
if(root.data == data) {
return root;
}
if (root.left != null){
return traverse (root.left, data);
}
if (root.right != null){
return traverse (root.right, data);
}
return null;
}
Die 'traverse' Verfahren zur Verwendung der Elemente in der binären Baum ist aber Sie Rückkehr die Wurzel links, Wurzel rechts oder root (auch wenn Wurzel' null'!). Die Idee zu rekursiven Funktionen besteht darin, den Basisfall und dann den repetitiven Code zu definieren, der bis zu diesem Basisfall erhalten wird. –
Welche Art von Traversal versuchen Sie zu tun? ist es ein 'BST'? Müssen Sie einen Knoten an der richtigen Stelle in einer 'BST' einfügen? – noMAD
Wenn Sie nach links gehen, kehren Sie als letzten Schritt in Zeile 4 zurück, und gehen Sie nie nach rechts, und geben Sie niemals currentNode zurück. Das sieht nicht gut aus. –