我正在尝试编写一个函数来遍历深度优先搜索的树。DFS没有内存的树
我现在的算法进行类似:
If children
go to first child
If no children
go to next sibling
If no siblings
go to parent
我遇到的问题是,我不能标记的树节点被访问了已经,所以当我去到父的周期只是重新设置,然后再次回到孩子身上,陷入循环。有没有人有任何想法可以解决这个问题?
(它使用ANTLR插件是在Java)
编辑:
继我写这个的建议之一:
public void traverseTree(Tree tree){
if (tree.getChildCount() > 0){
tree = tree.getChild(0);
traverseTree(tree);
System.out.println(tree.toString());
}
if (tree.getParent().getChild(tree.getChildIndex() + 1) != null){
tree = tree.getParent().getChild(tree.getChildIndex() + 1);
traverseTree(tree);
System.out.println(tree.toString());
}
if (!tree.getParent().toString().contains("ROOT_NODE")){
tree = tree.getParent();
traverseTree(tree);
System.out.println(tree.toString());
}
}
根节点为根节点的名称,但我收到堆栈溢出错误。任何人有任何想法为什么?
谢谢。
如果你不需要担心周期或其他问题,那么最简单的方法就是像@PeterLawrey所建议的那样使用递归方法。清洁和简单。如果你不能使用递归,你仍然可以使用一个单独的堆栈来维护相同的信息,包括返回的链接列表,如果节点没有反向链接的话。 – 2012-03-15 15:46:05