我正在嘗試編寫一個函數來遍歷深度優先搜索的樹。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