【发布时间】:2015-11-12 12:23:42
【问题描述】:
如果我的树是这样定义的:
case class Node(value: Int, children: Seq[Node])
但是为了论证,假设访问孩子是昂贵的,因此我只想在我实际需要时遍历它们。
如果Node 上的非严格、急切的 DFS 遍历被定义为
def traverse(node: Node): Unit = {
node.children foreach { child => traverse(child) }
}
如何创建它的惰性对应物?
理想情况下,我将有一个 iterator 方法,该方法返回一个基于 DFS 遍历排序的迭代器,该迭代器仅在调用 next() 时评估下一个元素:
val tree = Node(1, Seq(Node(2, Nil), Node(3, Nil)))
val dfsIt = tree.iterator // get a iterator with a DFS traversal ordering
val nextNode = dfsIt.next() // compute which element to return on demand
【问题讨论】:
-
我认为您的示例代码有误,应该是
node.children foreach { child => traverse(child) }。注意traverse(child)而不是traverse(node) -
你是对的。谢谢!
标签: scala iterator lazy-evaluation tree-traversal