data BST = MakeNode BST String BST
| Empty
我的类型声明
listToBST :: [String] -> BST
BSTToList :: BST -> [String]
另外,我试图用折叠和列表内涵,而不是标准的递归。 如果有人可以帮助我,它将不胜感激。
data BST = MakeNode BST String BST
| Empty
我的类型声明
listToBST :: [String] -> BST
BSTToList :: BST -> [String]
另外,我试图用折叠和列表内涵,而不是标准的递归。 如果有人可以帮助我,它将不胜感激。
我假设你想使用上一个问题中的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
对于listToBST,当我使用函数输入一个列表时,它只是将所有字符串向右对角地打印。 它应该在列表中的第一个成员,它在顶部,那么程序列表元素作为二叉搜索树从树中向左或向右倾倒 – user1204349 2012-03-08 20:21:55
从这些树中移除元素看起来像是最难的码。 – user1204349 2012-03-08 21:41:48
嗯,easist功能我能想出是'listToBst _ = Empty'。或者你有* hpw的某些要求*这应该完成?如果是这样,它可以帮助告诉我们。 – Ingo 2012-03-08 19:40:26
它必须是一个合法的二叉搜索树。元素从左到右添加到树中。 – user1204349 2012-03-08 21:16:04