Я определил BST в Haskell:
data BST a = BST a (BST a) (BST a) | BSTNil deriving Show
и некоторых подобных операциях:
findElem :: (Ord a, Eq a) => BST a -> a -> Maybe a
findElem BSTNil _ = Nothing
findElem (BST a left right) x
| x == a = Just x
| x < a = findElem left x
| x > a = findElem right x
inorder :: BST a -> [a]
inorder BSTNil = []
inorder (BST a left right) = inorder left ++ [a] ++ inorder right
Как мне вернуть наименьшее поддерево, содержащее два узлы, ключи которых даны, из BST?
Вот что я получил до сих пор:
subTree :: (Ord a, Eq a) => BST a -> a -> a -> Maybe (BST a)
subTree BSTNil _ _ = Nothing
subTree (BST a left right) x y
| findElem (BST a left right) x == Nothing = Nothing
| findElem (BST a left right) y == Nothing = Nothing
| findElem left x /= Nothing && findElem left y /= Nothing = subTree
left x y
| findElem right x /= Nothing && findElem right y /= Nothing = subTree
right x y