summaryrefslogtreecommitdiff
path: root/tree.hs
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2014-08-09 10:58:03 +0800
committerJoe Zhao <ztuowen@gmail.com>2014-08-09 10:58:03 +0800
commit5bdaa1e4ffe40add10f000ee993e6b500c419a37 (patch)
tree46a624488ece8d37fa3580422234ed2b4acc6728 /tree.hs
parent01aa73b269f7ad780233be338affdf3c9288b1ed (diff)
downloadhaskbox-old-5bdaa1e4ffe40add10f000ee993e6b500c419a37.tar.gz
haskbox-old-5bdaa1e4ffe40add10f000ee993e6b500c419a37.tar.bz2
haskbox-old-5bdaa1e4ffe40add10f000ee993e6b500c419a37.zip
add files from home for previous chapters and sandboxes
Diffstat (limited to 'tree.hs')
-rw-r--r--tree.hs38
1 files changed, 38 insertions, 0 deletions
diff --git a/tree.hs b/tree.hs
new file mode 100644
index 0000000..50f4774
--- /dev/null
+++ b/tree.hs
@@ -0,0 +1,38 @@
+import Data.Monoid
+import qualified Data.Foldable as F
+
+data Tree a = Empty | Node a (Tree a) (Tree a)
+ deriving (Show)
+
+instance F.Foldable Tree where
+ foldMap f Empty = mempty
+ foldMap f (Node x l r) = F.foldMap f l `mappend`
+ f x `mappend`
+ F.foldMap f r
+
+singleton :: a -> Tree a
+singleton x = Node x Empty Empty
+
+treeInsert :: (Ord a) => a -> Tree a -> Tree a
+treeInsert x Empty = singleton x
+treeInsert x (Node a left right)
+ | x == a = Node x left right
+ | x < a = Node a (treeInsert x left) right
+ | x > a = Node a left (treeInsert x right)
+
+treeElem :: (Ord a) => a -> Tree a -> Bool
+treeElem x Empty = False
+treeElem x (Node a left right)
+ | x == a = True
+ | x < a = treeElem x left
+ | x > a = treeElem x right
+
+testTree = Node 6
+ (Node 3
+ (Node 1 Empty Empty)
+ (Node 5 Empty Empty)
+ )
+ (Node 9
+ (Node 8 Empty Empty)
+ (Node 10 Empty Empty)
+ )