Sto cercando di tracciare il percorso di un nodo in un albero binario (non un albero di ricerca binario). Dato un nodo, sto provando a stampare i valori del percorso dalla radice.Hai bisogno di aiuto per tornare da un metodo ricorsivo
Ho scritto il seguente programma.
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();
}
}
Sto ottenendo l'uscita correttamente. Ma è un po 'disordinato. Se vedi il metodo trace (Node, Node), sto stampando i valori che non dovrei fare. Voglio che il metodo trace sia completato correttamente. Almeno, dovrei uccidere la struttura ricorsiva nello stadio in cui incontro la condizione if.
Si prega di avvisare.
Eccellente !!! Grazie mille .. Ora ho sperimentato come terminare/uscire dal metodo ricorsivo .. Grazie ancora! – bragboy
Ora che hai dato una "soluzione" invece di un suggerimento per i compiti, modifico la mia risposta per mostrare cosa intendevo. – rsp
Soluzione postata su: http://www.technicalypto.com/2010/02/trace-path-of-binary-tree.html Grazie. – bragboy