【发布时间】:2012-03-15 16:53:49
【问题描述】:
我正在尝试使用 ANTLR 树命令和递归遍历树。我目前拥有的代码是:
public void traverseTree(Tree tree){
int counter = 0;
System.out.println(tree.toString());
if (tree.getChildCount() > 0 && tree.getChild(0) != null){
System.out.println(tree.toString() + counter++);
tree = tree.getChild(0);
traverseTree(tree);
}
while (tree.getParent().getChild(tree.getChildIndex() + 1) != null){
System.out.println(tree.toString() + counter++);
tree = tree.getParent().getChild(tree.getChildIndex() + 1);
traverseTree(tree);
}
}
但是,好吧,它不起作用。我在树中获得了很多条目,但没有明显的顺序。谁能看出我哪里出错了?
谢谢。
编辑:
我在下面发表的评论应该是在这里开始的:
抱歉,我应该删除打印语句,他们只是在那里尝试调试它。我遇到的问题是它应该只搜索它开始的节点以及该节点的任何兄弟节点,它不应该上升一个级别,但它确实会打印所有内容。 (我将把它编辑到主目录中,它本来应该在那里,抱歉)。
我设法让代码最终像这样工作:
public void traverseTree(Tree tree){
System.out.println(tree);
if (tree.getChild(0) != null){
traverseTree(tree.getChild(0));
}
if(tree.getParent().getChildCount() > 1){
if(tree.getParent().getChild(tree.getChildIndex() + 1) != null)
traverseTree(tree.getParent().getChild(tree.getChildIndex() + 1));
}
}
【问题讨论】:
-
“深度优先”...你的意思是水平顺序吗?反水平顺序?我很困惑.. 其他可能性是预购、订购、后购