2013-10-04 67 views
2

我需要的是像scalaz.Tree玫瑰樹數據結構或以下:如何追加到玫瑰樹在斯卡拉

case class Tree[A](root: A, children: Stream[Tree[A]]) 

但是我有一個很難理解如何編寫一個函數追加節點。一般來說,我知道追加一個節點需要重建樹,而用不可變的數據結構做這件事需要遞歸函數,但我無法將它們放在一起。我確實看到了Scala: Tree Insert Tail Recursion With Complex Structure,但由於涉及二叉樹,我並不十分清楚如何爲多路樹實現它。

傳統上,我會實現這個mutable使用數組或等。我應該閱讀一些書或資源以更多地瞭解功能數據結構嗎?或者是否有一些示例代碼可以推薦給我閱讀?

回答

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中,但它應該很容易翻譯知識。