2014-12-07 31 views
0

我一直在考慮下面的一段代碼,我希望把它完成。目的是設計一個函數來計算BST中給定元素k的底面。 BST中元素'k'的底部是小於'k'的最大鍵。查找地板和天花板BST哈斯克爾

我真的很茫然......我已經編程這對Java,但一直沒能解決它在Haskell。

floor :: Ord a => a -> ABST a -> Maybe a 
floor x Empty = Nothing 
floor x (Node y w lt rt) 
    | x == y  = Just y 
    | x < y = undefined 
    | x > y = undefined 

在此先感謝您。

+0

首先找到最大的子樹的所有的元素都小於k(即,遍歷樹,直到找到它小於k的一個節點)。然後返回該樹的最大元素。把它寫成兩個不同的函數可能是最簡單的。 – user2407038 2014-12-07 18:44:12

回答

1

你可以嘗試檢查「自然」的遞歸調用是否解決這一問題有所幫助。

也就是說,考慮:

floor :: Ord a => a -> ABST a -> Maybe a 
floor x Empty = Nothing 
floor x (Node y w lt rt) 
    | x == y  = Just y 
    | x < y = ??? 
    | x > y = ??? 
    where floorL = floor x lt 
     floorR = floor x rt 

然後,有一些方法利用floorL,floorR達到想要的結果呢?