2013-03-29 74 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 -> -- ...