将列表转换为二进制搜索树,反之亦然

时间:2012-03-08 19:31:39

标签: haskell binary-tree

使用:

data BST = MakeNode BST String BST
          |  Empty

我的类型声明是

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

另外,我正在尝试使用折叠和列表推导而不是标准递归。 如果有人能帮助我,我们将不胜感激。

1 个答案:

答案 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