我需要像scalaz.Tree
这样的Rose Tree数据结构或以下内容:
case class Tree[A](root: A, children: Stream[Tree[A]])
但是,我很难理解如何编写附加节点的函数。一般来说,我理解附加节点涉及重建树,并且使用不可变数据结构执行该操作需要递归函数,但我还没有能够将它们放在一起。我确实看到Scala: Tree Insert Tail Recursion With Complex Structure,但由于涉及到二叉树,我还没有完全掌握如何为多路树实现它。
传统上,我会使用Array等可变地实现它。是否有一些书籍或资源我应该阅读以更多地了解功能数据结构?或者是否有一些示例代码可以推荐给我阅读?
答案 0 :(得分:1)
您对“追加节点”的要求并不明显。您可以通过简单的方式执行此操作,将第二个节点作为第一个子节点插入:
def append[A](tree1: Tree[A], tree2: Tree[A]) = tree1 match {
case Tree(root, children) => Tree(root, tree2 #:: children)
}
如果那不是你想要的,你能提供一个例子吗?
我是否应该阅读一些书籍或资源来更多地了解功能数据结构?或者是否有一些示例代码可以推荐给我阅读?
标准建议为Structure and Interpretation of Computer Programs。代码示例不在Scala中,但它应该很容易翻译知识。