Я пытаюсь отслеживать путь узла в двоичном дереве (а не двоичном дереве поиска). Учитывая узел, я пытаюсь напечатать значения пути из корня.Нужна помощь при возврате из рекурсивного метода
Я написал следующую программу.
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();
}
}
Я получаю выход правильно. Но его беспорядок. Если вы видите трассировку метода (Node, Node), я печатаю значения, которые я не должен делать. Я хочу, чтобы метод трассировки был правильно завершен. По крайней мере, я должен убить рекурсивную структуру на этапе, в котором я сталкиваюсь с условием if.
Просьба сообщить.
Отлично !!! Большое спасибо. Теперь я испытал, как прекратить/выйти из рекурсивного метода. Еще раз спасибо! – bragboy
Теперь, когда вы дали «решение» вместо подсказки домашней работы, я отредактирую свой ответ, чтобы показать, что я имел в виду. – rsp
Решение опубликовано: http://www.technicalypto.com/2010/02/trace-path-of-binary-tree.html Спасибо. – bragboy