aboutsummaryrefslogtreecommitdiff
path: root/ch03
diff options
context:
space:
mode:
Diffstat (limited to 'ch03')
-rw-r--r--ch03/3_b_8.hs25
1 files changed, 25 insertions, 0 deletions
diff --git a/ch03/3_b_8.hs b/ch03/3_b_8.hs
new file mode 100644
index 0000000..a2f1939
--- /dev/null
+++ b/ch03/3_b_8.hs
@@ -0,0 +1,25 @@
+-- Using the binary tree type that we defined earlier in this chapter, write a
+-- function that will determine the height of the tree. The height is the
+-- largest number of hops from the root to an Empty. For example, the tree Empty
+-- has height zero; Node "x" Empty Empty has height one; Node "x" Empty (Node
+-- "y" Empty Empty) has height two; and so on.
+
+{-- From examples/examples/ch03/Tree.hs --}
+data Tree a = Node a (Tree a) (Tree a)
+ | Empty
+ deriving (Show)
+{-- End of code from examples --}
+
+treeHeight :: Tree a -> Int
+treeHeight Empty = 0
+treeHeight (Node _ l r) = 1 + max (treeHeight l) (treeHeight r)
+
+-- ghci> :l 3_b_8.hs
+-- [1 of 1] Compiling Main ( 3_b_8.hs, interpreted )
+-- Ok, one module loaded.
+-- ghci> treeHeight Empty
+-- 0
+-- ghci> treeHeight (Node "x" Empty Empty)
+-- 1
+-- ghci> treeHeight (Node "x" Empty (Node "y" Empty Empty))
+-- 2