From 8a8f3714d05a8e8427528ca017d1efbc2c6560f1 Mon Sep 17 00:00:00 2001 From: Abhinav Sarkar Date: Tue, 1 Mar 2016 23:09:03 +0530 Subject: [PATCH] Code for 01 mar. --- 2016-03-01/BST.hs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 2016-03-01/BST.hs diff --git a/2016-03-01/BST.hs b/2016-03-01/BST.hs new file mode 100644 index 0000000..da260c3 --- /dev/null +++ b/2016-03-01/BST.hs @@ -0,0 +1,32 @@ +module BST where + +data BST = EmptyNode | Node BST Int BST deriving (Show, Eq) + +inOrder :: BST -> [Int] +inOrder EmptyNode = [] +inOrder (Node l v r) = inOrder l ++ [v] ++ inOrder r + +find :: BST -> Int -> Bool +find EmptyNode _ = False +find (Node l v r) x + | x == v = True + | x > v = find r x + | otherwise = find l x + +insert :: BST -> Int -> BST +insert EmptyNode x = Node EmptyNode x EmptyNode +insert node@(Node left value right) x + | x < value = Node (insert left x) value right + | x > value = Node left value (insert right x) + | otherwise = node + +fromList :: [Int] -> BST +fromList [] = EmptyNode +fromList (first : rest) = insert (fromList rest) first + +isBST :: BST -> Bool +isBST EmptyNode = True +isBST (Node EmptyNode _ EmptyNode) = True +isBST (Node l@(Node _ lv _) v EmptyNode) = lv < v && isBST l +isBST (Node EmptyNode v r@(Node _ rv _)) = rv > v && isBST r +isBST (Node l@(Node _ lv _) v r@(Node _ rv _)) = lv < v && v > rv && isBST l && isBST r