打印出二叉树

时间:2016-06-11 13:59:25

标签: haskell binary-tree

这是我的Guidline:

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]

...

我定义了rootschilds

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]

但那不是我真正想要的。有人有想法。

1 个答案:

答案 0 :(得分:1)

这很好用:

f Empty = []
f (Node l v r) = case (f l, f r) of
                   ((x:xs),(y:ys)) -> [[v],x++y] ++ (zipWith (++) xs ys)
                   ([],[])         -> [[v]]
                    ......

完成模式。 (您可以使用完整的树来测试它,以确保它是一个良好的开端)。