2013-03-29 39 views
-1

如何在Haskell的二叉搜索树中搜索元素? 我定义我的树:哈希克尔二元搜索树中的元素?

data Tree a = 
    Null | 
    L a | 
    N (Tree a) a (Tree a) 
    deriving Show 

我想要在BST搜索元素的功能:

findElem :: Tree a -> a -> Maybe a 
findElem tree n = ... 

我如何能做到吗?

+2

旁注:'大号了'是多余的,使用'空ň一个Null',而不是为了简单。 –

+2

您使用的是什么定义的BST?写下来。它的子句和Haskell构造之间应该有近乎完美的一一对应关系。 –

+2

您需要一个'Ord'约束,'findElem :: Ord a => BST a - > a - > Maybe a'。 –

回答

5

正如评论建议,你应该摆脱L构造函数,并使用N Null x Null来代替。它可以让你避免为叶节点编写不必要的特殊情况。然后

findElem应该是这个样子:

findElem :: Ord a => Tree a -> a -> Maybe a 
findElem Null _ = -- ... 
findElem (N l x r) y = 
    case compare x y of 
     LT -> -- ... 
     EQ -> -- ... 
     GT -> -- ...