2012-03-08 62 views
0

使用:转换列表以二叉搜索树,和对面

data BST = MakeNode BST String BST 
      | Empty 

我的类型声明

listToBST :: [String] -> BST 
BSTToList :: BST -> [String] 

另外,我试图用折叠和列表内涵,而不是标准的递归。 如果有人可以帮助我,它将不胜感激。

+1

嗯,easist功能我能想出是'listToBst _ = Empty'。或者你有* hpw的某些要求*这应该完成?如果是这样,它可以帮助告诉我们。 – Ingo 2012-03-08 19:40:26

+0

它必须是一个合法的二叉搜索树。元素从左到右添加到树中。 – user1204349 2012-03-08 21:16:04

回答

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 
+0

对于listToBST,当我使用函数输入一个列表时,它只是将所有字符串向右对角地打印。 它应该在列表中的第一个成员,它在顶部,那么程序列表元素作为二叉搜索树从树中向左或向右倾倒 – user1204349 2012-03-08 20:21:55

+0

从这些树中移除元素看起来像是最难的码。 – user1204349 2012-03-08 21:41:48