【发布时间】:2010-11-01 12:05:03
【问题描述】:
该函数应将层中参数树的标记打印为层列表。每一层的节点和叶子标记是从左到右列出的,即哪一层是最左边的节点,列表的第一个元素,最右边的节点是列表的最后一个元素。 Ord 类型的参数表示是按照从小到大的升序(TopDown)还是从大到小的降序(BottomUp)下发
data Tree = Leaf Integer | Node Integer Tree Tree
type Layer = [Integer]
data Ord = BottomUp | TopDown
wLayer :: Tree -> Ord -> [Layer]
示例 1:我们使用参数调用函数 wLayer
wLayer (Node 1 (Node 2 (Leaf 21) (Leaf 22)) (Node 3 (Leaf 31) (Leaf 32))) TopDown
结果:[[1],[2,3],[21,22,31,32]]
示例 2: wLayer (节点 1 (节点 2 (叶子 21) (叶子 22)) (节点 3 (叶子 31) (叶子 32))) 自底向上 结果:[[21,22,31,32],[2,3],[1]]
我该如何实现这个?
编辑
data Tree = Leaf Integer
| Node Integer Tree Tree
type Layer = [Integer]
data Ord = BottomUp | TopDown
writeLayer :: Tree -> Ord -> [Layer]
writeLayer Leaf x = [x]
writeLayer (Node x lt rt) BottomUp = (writeLayer rt BottomUp) ++ [x] ++ (writeLayer lt BottomUp)
writeLayer (Node x lt rt) TopDown = [x] ++ (writeLayer lt TopDown) ++ (writeLayer rt TopDown)
这是我的程序,但它不起作用我该如何解决它?
【问题讨论】:
-
到目前为止你尝试了什么?
标签: haskell