删除BST Haskell中的最小值

时间:2013-01-27 03:55:06

标签: haskell binary-search-tree

如何删除BST中的最小值?我似乎找不到保留树的方法

data BST = EmptyT
         | Node Float BST BST
           deriving (Eq, Show, Read)

deleteMin :: BST -> Maybe BST
deleteMin EmptyT  = Nothing
deleteMin (Node x left right)
    |left == EmptyT = ? 
    |otherwise = ?

我需要吸气剂和制定者吗?

1 个答案:

答案 0 :(得分:5)

Haskell在OOP意义上没有“getter and setter”,尽管你可以 提出类似的概念。如果要删除二进制文件中的值 树,你必须构造一个缺少值的新树。那就是你 “保持树。”

假设您使用的是标准BST,那么树中最左边的节点就会出现 包含最小元素。所以,通过向左遍历你的树, 你最终应该遇到Node x EmptyT r的情况。 任何其他节点,您只需递归调用左侧分支上的deleteMin

这给出了一个看起来像

的函数
deleteMin :: BST -> Maybe BST
deleteMin EmptyT                = Nothing
deleteMin (Node x EmptyT right) = Just right
deleteMin (Node x left right)   =
    case deleteMin left of
         Nothing -> Nothing
         Just nl -> Just $ Node x nl right

您必须检查每次拨打deleteMin的结果以进行检查 Nothing。我不认为你真的需要返回Maybe BST,除非你 确实需要表明没有要删除的元素。它赚得更多 感觉(至少对我来说)如果没有什么可以返回一棵空树 删除。

我认为大多数人还会考虑使用模式匹配,而不是使用具有相等性检查的警卫。