Scala中的懒惰树遍历迭代器

时间:2015-08-19 09:24:07

标签: scala iterator lazy-evaluation tree-traversal

如果我的树被定义为:

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

1 个答案:

答案 0 :(得分:2)

case class Node(value: Int, children: Seq[Node]) {

  def dfsIterator: Iterator[Node] = {
    println(value)
    children.iterator.map(_.dfsIterator).flatten ++ Iterator(this)
  }
}