English 中文(简体)
翻转一棵树 - 但一步一步一步
原标题:Traverse a Tree - But Step by Step

我遵守了绕过一棵树的代码(预定顺序):

public void traverse(Node node) {
    visit(node);
    for (Node child : node.getChildren()) {
        traverse(child);
    } 
}

我想要一个一步步跨行。 类似 < code> Iterator 的东西, 这样一个客户端( 打电话者) 可以成为另一个应用程序, 就可以控制跨行 。 (例如: 在 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);
    } 
}

如您在代码中看到的,我将访问所有节点(在集合节点中),以收集并将它们列入预先订购格式的清单。

我想知道,如果没有这种额外的(集合节点)迭代,是否有任何解决办法?

Regards, Mohammad

最佳回答

您所张贴的算法背后的想法是使用方法堆叠作为隐含的数据结构。每当您输入所有节点时,都会被暗含地推到函数堆叠上,当您在堆叠上转动时,它们就会被弹出。

现在,要让此算法像传动器一样可以中止, 您需要做的就是让这个隐含的堆叠变得清晰。 在您的班级中添加堆叠, 在访问时按下所有孩子, 然后总是使用堆叠的顶点来继续。 您可以随时中止它, 同时您可以保持堆叠作为您可以暂停和存储的状态 。

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

问题回答

您不认为如果您的代码 sawnNodes( child) 会出错, 因为 smallNodes() 方法会接受两个参数, 最后一条线会出错 。

您可以在树上找到树的横行代码, 使用切换器一步一步 < a href="http://www2.hawaii.edu/~esb/2010spring.ics211/TreeIterator.java.html" rel="nofollow" >这里

希望这能帮到你





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签