BST Checker

Run Settings
LanguageHaskell
Language Version
Run Command
data Tree a = EMPTY | NODE (Tree a, a, Tree a) main :: IO () main = do putStrLn "A simple Binary Search Tree checker" putStrLn "The Result:" putStr "Valid BST: " putStrLn . show $ checkBST bst putStr "Invalid BST: " putStrLn . show $ checkBST nobst bst :: Tree Int bst = (NODE((NODE((NODE(EMPTY,1,EMPTY)),3,(NODE(EMPTY,5,EMPTY))),7,(NODE((NODE(EMPTY,8,EMPTY)),9,(NODE((NODE(EMPTY,11,EMPTY)),12,EMPTY))))))) nobst :: Tree Int nobst = (NODE((NODE(EMPTY,6,(NODE(EMPTY,12,EMPTY)))),8,EMPTY)) checkBST :: (Ord a) => Tree a -> Bool checkBST EMPTY = True checkBST (NODE (left,val,right)) = checkBSTBelow left val && checkBSTAbove right val checkBSTBelow :: (Ord a) => Tree a -> a -> Bool checkBSTBelow EMPTY _ = True checkBSTBelow (NODE (left,val,right)) upBound = val < upBound && checkBSTBelow left val && checkBSTBetween right val upBound checkBSTAbove :: (Ord a) => Tree a -> a -> Bool checkBSTAbove EMPTY _ = True checkBSTAbove (NODE (left,val,right)) lowBound = lowBound < val && checkBSTAbove right val && checkBSTBetween left lowBound val checkBSTBetween :: (Ord a) => Tree a -> a -> a -> Bool checkBSTBetween EMPTY _ _ = True checkBSTBetween (NODE (left,val,right)) lowBound upBound = lowBound < val && val < upBound && checkBSTBetween left lowBound val && checkBSTBetween right val upBound
Editor Settings
Theme
Key bindings
Full width
Lines