Estoy intentando rastrear la ruta de un nodo en un árbol binario (no un árbol de búsqueda binario). Dado un nodo, estoy tratando de imprimir los valores de la ruta desde la raíz.Necesito ayuda para regresar de un método recursivo
He escrito el siguiente programa.
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();
}
}
Estoy recibiendo la salida correctamente. Pero es un poco desordenado. Si ve el método trace (Node, Node), estoy imprimiendo los valores que no debo hacer. Quiero que el método de seguimiento se complete correctamente. Al menos, debería matar a la estructura recursiva en la etapa en la que encuentro la condición if.
Por favor, asesorar.
¡¡Excelente !!! Muchas gracias. Ahora he experimentado cómo terminar/salir del método recursivo. ¡Gracias de nuevo! – bragboy
Ahora que me dio una "solución" en lugar de una pista para tareas, editaré mi respuesta para mostrar lo que quise decir. – rsp
Solución publicada en: http://www.technicalypto.com/2010/02/trace-path-of-binary-tree.html Gracias. – bragboy