使用:
data BST = MakeNode BST String BST
| Empty
我的类型声明是
listToBST :: [String] -> BST
BSTToList :: BST -> [String]
另外,我正在尝试使用折叠和列表推导而不是标准递归。 如果有人能帮助我,我们将不胜感激。
答案 0 :(得分:1)
我假设您要使用上一个问题中的add
函数。
然后你可以实现这样的功能:
listToBST :: [String] -> BST
listToBST = foldr add Empty
bstToList :: BST -> [String]
bstToList = flip go []
where
-- Uses a difference list for efficient appends
go :: BST -> [String] -> [String]
go Empty = id
go (MakeNode l p r) = go l . (p:) . go r