Java通用树遍历

Java通用树遍历,java,tree,traversal,Java,Tree,Traversal,我要用Java解决一个问题。我有一棵树需要穿过。这是: 1 / \ 1 2 3 1 2 3 / | \ \ 123 123 123 same for those three nodes 现在需要遍历的方式是从根开始,遍历最深的最左边节点(这里是1)和最左边的叶子(1)。之后,它应该再次从根开始跟踪所有数字,这一次到达同一最左节点的下一个叶。。以此类推,也就是从顶部开始,每次一个接一个地到达该节点的所有剩余叶。在跟踪最左侧节点

我要用Java解决一个问题。我有一棵树需要穿过。这是:

        1
     /     \
   1 2 3  1 2 3      
 /   |  \    \
123 123 123  same for those three nodes
现在需要遍历的方式是从根开始,遍历最深的最左边节点(这里是1)和最左边的叶子(1)。之后,它应该再次从根开始跟踪所有数字,这一次到达同一最左节点的下一个叶。。以此类推,也就是从顶部开始,每次一个接一个地到达该节点的所有剩余叶。在跟踪最左侧节点的所有叶之后,它应该照常进行(从顶部开始),现在移动到下一个未邀请的节点(此处为2)。。所有的树都是如此。因此,前6条轨迹将是:

111 112 113 121 122 123 ... 等等


所有被追踪的号码都需要按照上述方式按顺序追踪和记录。任何人都可以在如何实现算法方面提供帮助?。谢谢。

您所描述的内容被称为。你应该知道这不是最有效的算法,有更好的算法,比如

根据您尝试做的事情,甚至可以使用更专业的策略,例如游戏搜索或其他启发式搜索

如果设置为使用深度优先搜索,并希望返回从根节点到该节点的路径,则在找到目标节点后,可以使用以下类似的方法。假设
节点
是您的目标节点

List<Node> path = new ArrayList<Node>();
path.add(node);
while(node.parent != null){
  path.add(node.parent);
  node = node.parent;
}
return path; //returns a path from {goal,...,root}
List path=new ArrayList();
添加(节点);
while(node.parent!=null){
添加(node.parent);
node=node.parent;
}
返回路径//返回来自{goal,…,root}的路径

您需要的是一个树遍历算法

void traverse(Node root, String path) {
    path += root.getValue();
    for (Node child : root.getChildren())
        traverse(child, path);

    // end of current traversal
    if (root.getChildren().isEmpty())
        System.out.print(path + " ");
}

@是的,你是对的,这是上帝与搜索无关。。到目前为止,虽然没有人知道如何做。。