在Haskell中实现二进制搜索树插入

时间:2014-01-18 08:49:49

标签: haskell insert binary-search-tree

我实现了BST的插入功能,下面是我的代码:

data Tree a = Empty | Branch a (Tree a) (Tree a) 
    deriving (Show, Eq)

tinsert             :: Tree a -> a -> Tree a 
tinsert Empty a         = Branch a Empty Empty
tinsert (Branch a left right) b
    | b == a = Branch a left right
    | b < a = Branch a (tinsert left b) right
    | b > a = Branch a left (tinsert right b)

当我在ghci中加载此函数时,它给了我很多错误,这些错误似乎与比较部分有关。我没有看到任何问题。我是Haskell的新手,有人可以帮忙吗?非常感谢。

1 个答案:

答案 0 :(得分:8)

tinsert的类型更改为

tinsert :: (Ord a) => Tree a -> a -> Tree a 

修复它。

这是必要的,因为函数(<)(>)来自Ord类型类,您需要拥有类型签名中的函数。

您还使用==(==) :: Eq a => a -> a -> Bool,但EqOrd的超类,因此编译器知道如果您已经(<)可用有==,因此您也不需要说Eq a