对于学校作业,我在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)
非常感谢任何有关如何操作的提示。
答案 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 []]]]