Я определил свой тип данных 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)
И теперь я застрял, потому что я не могу понять, как совместить функции порядка с foldTree
.
Может кто-нибудь дать мне подсказку, пожалуйста?