【发布时间】:2016-06-11 13:59:25
【问题描述】:
这是我的指导方针:
data BinTree α = Empty
| Node (BinTree α) α (BinTree α)
deriving (Eq, Show)
现在我想创建一个函数:
levels :: BinTree a -> [[a]]
这应该打印出一个列表中的二叉树,但每个级别都有自己的。例如:[[1],[2,3],[4,5,6,7]] 或
[1]
[2,3]
[4,5,6,7]
...
我定义了roots 和childs:
roots ts = [ a | Node _ a _ <- ts ]
childs ts = [ t | Node l _ r <- ts, t <- [l, r] ]
还有一个遍历函数,它获取子树及其节点的列表。
traverse' :: [BinTree α] -> [α]
traverse' [] = []
traverse' ts = roots ts ++ traverse' (childs ts)
levels :: BinTree α -> [α]
levels t = traverse [t]
但这不是我真正想要的。有人有想法吗。
【问题讨论】:
-
尝试编写
f :: BinTree a -> [[a]],它将二叉树转换为列表列表,其中第一个列表包含根,第二个列表包含子项,下一个包含孙子项,依此类推。在那之后你就差不多完成了。 -
否则看看this的问题,可能有助于设计功能。
-
考虑如何根据左右子节点的级别来表达节点的级别。你被介绍过
zip函数了吗? -
levels ts = roots ts : levels (childs ts) -
我的问题是,我不知道如何将其打印出来。
标签: haskell binary-tree