Java 一步一步地穿过一棵树

Java 一步一步地穿过一棵树,java,algorithm,data-structures,tree,traversal,Java,Algorithm,Data Structures,Tree,Traversal,我有以下代码来遍历树(预排序): 我想一步一步地走。类似于迭代器,这样可以作为另一个应用程序的客户端(调用方)就可以控制遍历。(例如:在UI中,我们有一个“下一步”按钮,单击该按钮,我们必须访问下一个节点) 我目前的解决方案是这样的: List<Node> nodes = new ArrayList<Node>(); collectNodes(root, nodes); Iterator<Node> it = nodes.iterator(); // do m

我有以下代码来遍历树(预排序):

我想一步一步地走。类似于
迭代器
,这样可以作为另一个应用程序的客户端(调用方)就可以控制遍历。(例如:在UI中,我们有一个“下一步”按钮,单击该按钮,我们必须访问下一个节点)

我目前的解决方案是这样的:

List<Node> nodes = new ArrayList<Node>();
collectNodes(root, nodes);
Iterator<Node> it = nodes.iterator();
// do my job.
...

public void collectNodes(Node node, List<Node> nodes) {
    nodes.add(node);
    for (Node child : node.getChildren()) {
        collectNodes(child, nodes);
    } 
}
List nodes=new ArrayList();
收集节点(根,节点);
Iterator it=nodes.Iterator();
//做我的工作。
...
公共节点(节点节点、列表节点){
nodes.add(node);
对于(节点子节点:Node.getChildren()){
收集节点(子节点、节点);
} 
}
正如您在代码中所看到的,我正在访问所有节点(在collectNodes中)以收集并以预排序格式将它们放入列表中

我想知道如果没有这个额外的(收集节点)迭代,是否有任何解决方案

问候,,
Mohammad

您可以使用迭代器一步一步地找到遍历树的代码


希望这能对您有所帮助。

您发布的算法背后的想法是将方法堆栈用作隐式数据结构。每当您输入Travel时,所有节点都会隐式推送到函数堆栈上,然后当您对它们进行迭代时,它们会弹出

现在,要使该算法像迭代器一样可挂起,只需将该隐式堆栈显式化即可。在访问push all children时,将堆栈添加到类中,然后始终使用堆栈上的顶部节点继续。您可以随时挂起它,同时将堆栈保持为可以挂起并存储在任何位置的状态


这个技巧实际上适用于任何类型的递归算法。

如果您的代码
collectNodes(子项)
的最后一行不会给出错误,因为
collectNodes()
方法将接受两个参数。

请在答案本身添加内容。如果链接断开,仅链接的答案是不好的。
List<Node> nodes = new ArrayList<Node>();
collectNodes(root, nodes);
Iterator<Node> it = nodes.iterator();
// do my job.
...

public void collectNodes(Node node, List<Node> nodes) {
    nodes.add(node);
    for (Node child : node.getChildren()) {
        collectNodes(child, nodes);
    } 
}