Haskell非二叉树

时间:2014-02-24 22:06:56

标签: haskell tree

对于学校作业,我在Haskell中实现了二元树实现:

data BinTree = L | N BinTree BinTree deriving (Eq, Show)

-- this function creates the full binary tree of size 2^(n+1) -1
makeBinTree 0 = L
makeBinTree n = N (makeBinTree (n-1)) (makeBinTree (n-1))

这会创建一个二叉树,其中每个父节点都有两个子节点。 因此,makeBinTree 3具有以下输出:N(N(N L L)(N L L))(N(N L L)(N L L))

为了我自己的理解,我希望创建一个树,使每个父节点具有任意数量的子节点。我已经被困了一段时间才能继续。

所以输入是:

makeBinTree 2 3

,输出为:

N(N L L L)(N L L L)(N L L L)

非常感谢任何有关如何操作的提示。

1 个答案:

答案 0 :(得分:1)

您可以在下面的代码中执行此操作,您必须以反向波兰表示法指定树,并且数字是您正在创建的树的奇偶校验。

如果一棵树试图采用大于树列表中树木数量的树木,程序就会崩溃。

如果创建的最后一棵树没有采用树列表中的所有树,则程序会生成多个树。

data Tree = Branch [Tree] deriving Show

make :: [Int] -> [Tree] -> [Tree]
make [] l2 = l2
make (i1 : l1) l2 = make l1 (Branch (take i1 l2) : drop i1 l2)

示例:

make [0, 0, 2, 0, 2] [] = [Branch [Branch [], Branch [Branch [], Branch []]]]