diff options
author | Joe Zhao <ztuowen@gmail.com> | 2014-08-09 10:58:03 +0800 |
---|---|---|
committer | Joe Zhao <ztuowen@gmail.com> | 2014-08-09 10:58:03 +0800 |
commit | 5bdaa1e4ffe40add10f000ee993e6b500c419a37 (patch) | |
tree | 46a624488ece8d37fa3580422234ed2b4acc6728 /tree.hs | |
parent | 01aa73b269f7ad780233be338affdf3c9288b1ed (diff) | |
download | haskbox-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.hs | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -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) + ) |