【发布时间】:2019-10-19 15:33:08
【问题描述】:
如何向下和水平地建造一棵树?
我现在有一棵树:
data Tree a = Node a [Tree a]
然后,我有一个根Int 和[Int] 的列表
1 and [2,3,4]
我想建一棵树
1
/ | \
2 3 4
/\ / \ /\
3 4 2 4 2 3
| | | | | |
4 3 4 2 3 2
在 Haskell 中,它看起来像
Node 1 [Node 2 [Node 3 [Node 4 []],Node 4[Node 3 []]], Node 3 [Node 2 [Node 4 []],
Node 4 [Node 2 []]], Node 4 [Node 2 [Node 3 []], Node 3 [Node 2 []]]]
这是我尝试过的: 这段代码使我的树向下生长
down :: Int -> [Int] -> Tree Int
down y [] = Node y []
down y (x:xs) = Node y [down x xs]
这段代码让我的树横向生长
side :: Int -> [Int] -> Tree Int
side y [] = Node y []
side y x = Node y $ map (\x -> Node x []) y
现在,我无法将它们拼凑在一起以获得上述解决方案。任何帮助表示赞赏
【问题讨论】:
-
那么,树中的每条路径都只是
[1,2,3,4]的排列,它以1开头? -
@chepner 是的,没错
-
你遇到了什么麻烦?
-
@MichaelLitchard 我不知道如何将向下和横向生长树的代码拼凑在一起以获得我想要的树
-
棘手的部分是这样做不仅仅是两种技术的组合。每个级别可供选择的整数列表会因分支而异。