【发布时间】:2021-05-04 21:34:36
【问题描述】:
我定义了自己的数据类型BinTree,它描述了我的二叉树:
data BinTree a = Empty | Node a (BinTree a) (BinTree a) deriving (Show,Eq)
之后我为二叉树实现了三个排序函数:preorder、inorder 和 postorder:
preorder :: BinTree a -> [a]
preorder Empty = []
preorder (Node x lt rt) = [x] ++ preorder lt ++ preorder rt
inorder :: BinTree a -> [a]
inorder Empty = []
inorder (Node x lt rt) = inorder lt ++ [x] ++ inorder rt
postorder :: BinTree a -> [a]
postorder Empty = []
postorder (Node x lt rt) = postorder lt ++ postorder rt ++ [x]
为了改进我的排序函数,我实现了 foldTree 函数(它与普通的 foldr 函数一样工作,但使用二叉树):
foldTree :: (a -> b -> b -> b) -> b -> BinTree -> b
foldTree f e Empty = e
foldTree f e (Node x lt rt) = f x (foldTree f e lt) (foldTree f e rt)
现在我被卡住了,因为我不知道如何将 order-functions 与 foldTree 结合起来。
有人可以给我提示吗?
【问题讨论】:
标签: haskell binary-tree fold inorder preorder