Tôi đang cố gắng theo dõi đường dẫn của một nút trong cây nhị phân (không phải cây tìm kiếm nhị phân). Cho một nút, tôi đang cố gắng in các giá trị của đường dẫn từ gốc.Cần trợ giúp để trở về từ phương thức đệ quy
Tôi đã viết chương trình sau đây.
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();
}
}
Tôi nhận được kết quả đầu ra đúng cách. Nhưng loại lộn xộn của nó. Nếu bạn thấy dấu vết phương thức (Node, Node), tôi đang in các giá trị mà tôi không nên làm. Tôi muốn phương pháp theo dõi hoàn thành chính xác. Ít nhất, tôi nên giết cấu trúc đệ quy ở giai đoạn tôi gặp phải điều kiện nếu.
Vui lòng thông báo.
Tuyệt vời !!! Cảm ơn bạn rất nhiều .. Bây giờ tôi đã có kinh nghiệm làm thế nào để chấm dứt/đi ra khỏi phương pháp đệ quy .. Cảm ơn một lần nữa! – bragboy
Bây giờ bạn đã đưa ra một "giải pháp" thay vì gợi ý bài tập về nhà, tôi sẽ chỉnh sửa câu trả lời của mình để thể hiện ý tôi. – rsp
Giải pháp được đăng tại: http://www.technicalypto.com/2010/02/trace-path-of-binary-tree.html Cảm ơn. – bragboy