Я пытаюсь написать функцию для обхода дерева с первым поиском по глубине.
Мой текущий алгоритм выглядит примерно так:
If children
go to first child
If no children
go to next sibling
If no siblings
go to parent
Проблема, с которой я сталкиваюсь, заключается вчто я не могу пометить узлы на дереве как посещенные, поэтому, когда я перехожу к родителю, цикл просто сбрасывается, и он снова переходит к дочернему элементу, застревая в цикле.Кто-нибудь имеет какие-либо идеи относительно того, как я мог бы решить эту проблему?
(это в Java с помощью плагина ANTLR)
РЕДАКТИРОВАТЬ:
Следуя одному из предложений, я написал это:
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());
}
}
Корневой узел - это имя корневого узла, но я получаю ошибку переполнения стека.У кого-нибудь есть идеи, почему?
Спасибо.