【发布时间】:2018-09-22 18:20:44
【问题描述】:
我正在尝试使用展开功能来构建树。
Tree t = Leaf | Node (Tree t) t (Tree t)
unfoldT :: (b -> Maybe (b, a, b)) -> b -> Tree a
unfoldT f b =
case f b of
Nothing -> Leaf
Just (lt, x, rt) -> Node (unfoldT f lt) x (unfoldT f rt)
构建函数需要创建一个高度等于提供的数字的树,并按顺序编号。基本情况是 build 0 = Leaf,下一个是 build 1 = Node (Leaf 0 Leaf)。
build :: Integer -> Tree Integer
我尝试解决它:
build n = unfoldT (\x -> Just x) [0..2^n-2]
我不完全确定如何在这里构建树。 如果有人能指出我正确的方向,我会很高兴。
编辑 1:
如果我要使用 2 元组,我会组合什么?我需要能够以某种方式引用当前节点、它的左子树和它的右子树吗?
【问题讨论】:
-
你为什么在最后写
[0..n^n-2]? -
提示:使用二元组作为
b。 -
愚蠢的我。我改正了
-
Node (Leaf 0 Leaf)是无效的表达式。它应该是(Node Leaf 0 Leaf)或只是Node Leaf 0 Leaf。
标签: haskell functional-programming binary-tree