September 2017 Update

This commit is contained in:
Ingy döt Net 2017-09-23 10:01:46 +02:00
parent bba7bfd280
commit ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions

View file

@ -1,45 +1,55 @@
data Tree a = Empty
| Node { value :: a,
left :: Tree a,
right :: Tree a }
data Tree a
= Empty
| Node { value :: a
, left :: Tree a
, right :: Tree a}
preorder, inorder, postorder, levelorder :: Tree a -> [a]
preorder Empty = []
preorder (Node v l r) = v : preorder l ++ preorder r
preorder Empty = []
preorder (Node v l r) = [v]
++ preorder l
++ preorder r
inorder Empty = []
inorder (Node v l r) = inorder l ++ (v : inorder r)
inorder Empty = []
inorder (Node v l r) = inorder l
++ [v]
++ inorder r
postorder Empty = []
postorder (Node v l r) = postorder l
++ postorder r
++ [v]
postorder Empty = []
postorder (Node v l r) = postorder l ++ postorder r ++ [v]
levelorder x = loop [x]
where loop [] = []
loop (Empty : xs) = loop xs
loop (Node v l r : xs) = v : loop (xs ++ [l,r])
where
loop [] = []
loop (Empty:xs) = loop xs
loop (Node v l r:xs) = v : loop (xs ++ [l, r])
-- TEST --------------------------------------------------------------
tree :: Tree Int
tree = Node 1
(Node 2
(Node 4
(Node 7 Empty Empty)
Empty)
(Node 5 Empty Empty))
(Node 3
(Node 6
(Node 8 Empty Empty)
(Node 9 Empty Empty))
Empty)
tree =
Node
1
(Node 2 (Node 4 (Node 7 Empty Empty) Empty) (Node 5 Empty Empty))
(Node 3 (Node 6 (Node 8 Empty Empty) (Node 9 Empty Empty)) Empty)
asciiTree :: String
asciiTree =
unlines
[ " 1"
, " / \\"
, " / \\"
, " / \\"
, " 2 3"
, " / \\ /"
, " 4 5 6"
, " / / \\"
, " 7 8 9"
]
-- OUTPUT --------------------------------------------------------------
main :: IO ()
main = do print $ preorder tree
print $ inorder tree
print $ postorder tree
print $ levelorder tree
main = do
putStrLn asciiTree
mapM_ putStrLn $
zipWith
(\s xs -> justifyLeft 14 ' ' (s ++ ":") ++ unwords (show <$> xs))
["preorder", "inorder", "postorder", "level-order"]
([preorder, inorder, postorder, levelorder] <*> [tree])
where
justifyLeft n c s = take n (s ++ replicate n c)