如何在Scalaz中迭代树

时间:2015-12-29 19:58:47

标签: scala tree scalaz tree-traversal

Scalaz Tree类通过TreeLoc (Javadoc)证明了看似非常有用的“Zipper”功能。

然而,对我来说,如何轻松地遍历树(例如,在包含总共n个> k个节点的树中找到“第k个”节点)并不明显,而无需对是否进行大量条件对冲拉链位于当前孩子列表的末尾。

有没有一种简单的方法可以做到这一点,我错过了?

1 个答案:

答案 0 :(得分:3)

TreeLoc.find方法窃取,您可以执行以下操作:

  def findAt[A](tree: TreeLoc[A], k: Int): Option[TreeLoc[A]] = {
    Cobind[TreeLoc].cojoin(tree).tree.flatten.drop(k).headOption
  }