Próbuję prześledzić ścieżkę węzła w drzewie binarnym (a nie binarnym drzewie wyszukiwania). Biorąc pod uwagę węzeł, próbuję wydrukować wartości ścieżki z katalogu głównego.Potrzebujesz pomocy w powrocie z metody rekurencyjnej
Napisałem następujący program.
package dsa.tree;
import java.util.Stack;
public class TracePath {
private Node n1;
public static void main(String args[]){
TracePath nodeFinder = new TracePath();
nodeFinder.find();
}
public void find(){
Tree t = getSampleTree();
tracePath(t,n1);
}
private Tree getSampleTree() {
Tree bsTree = new BinarySearchTree();
int randomData[] = {43,887,11,3,8,33,6,0,46,32,78,76,334,45};
for(int i=0;i<randomData.length;i++){
bsTree.add(randomData[i]);
}
n1 = bsTree.search(76);
return bsTree;
}
public void tracePath(Tree t, Node node){
trace(t,node);
}
Stack<Node> mainStack = new Stack<Node>();
public void trace(Tree t, Node node){
trace(t.getRoot(),node);
}
private void trace(Node parent, Node node){
mainStack.push(parent);
if(node.data == parent.data){
for(Node iNode:mainStack){
System.out.println(iNode.data);
}
return;
}
if(parent.left != null){
trace(parent.left, node);
}
if(parent.right!=null){
trace(parent.right, node);
}
mainStack.pop();
}
}
Dostaję poprawnie dane wyjściowe. Ale jego rodzaj bałaganu. Jeśli widzisz śledzenie metody (Węzeł, Węzeł), drukuję wartości, których nie powinienem robić. Chcę, aby metoda śledzenia została poprawnie ukończona. Przynajmniej powinienem zabić strukturę rekursywną na etapie, w którym napotykam warunek if.
Prosimy o radę.
Doskonały !!! Dziękuję bardzo .. Teraz doświadczyłem, jak zakończyć/wyjść z metody rekurencyjnej .. Jeszcze raz dziękuję! – bragboy
Teraz, gdy podałeś "rozwiązanie" zamiast wskazówki domowej, zmienię moją odpowiedź, aby pokazać, co mam na myśli. – rsp
Rozwiązanie zamieszczone na stronie: http://www.technicalypto.com/2010/02/trace-path-of-binary-tree.html Dzięki. – bragboy