Grading note: 10pts total
* 2pts for inBST
* 1pt for all other definitions
module HW1 where
| Integer-labeled binary trees.
data Tree
= Node Int Tree Tree ^ Internal nodes
| Leaf Int ^ Leaf nodes
deriving (Eq,Show)
| An example binary tree, which will be used in tests.
t1 :: Tree
t1 = Node 1 (Node 2 (Node 3 (Leaf 4) (Leaf 5))
(Leaf 6))
(Node 7 (Leaf 8) (Leaf 9))
| Another example binary tree. This one satisfies the BST property.
t2 :: Tree
t2 = Node 6 (Node 2 (Leaf 1) (Node 4 (Leaf 3) (Leaf 5)))
(Node 8 (Leaf 7) (Leaf 9))
| Some more trees that violate the BST property.
t3, t4, t5, t6 :: Tree
t3 = Node 3 (Node 2 (Leaf 1) (Leaf 4)) (Leaf 5)
t4 = Node 3 (Leaf 1) (Node 4 (Leaf 2) (Leaf 5))
t5 = Node 4 (Node 2 (Leaf 3) (Leaf 1)) (Leaf 5)
t6 = Node 2 (Leaf 1) (Node 4 (Leaf 5) (Leaf 3))
| All of the example trees in one list.
ts :: [Tree]
ts = [t1,t2,t3,t4,t5,t6]
| The integer at the left-most node of a binary tree.
>>> leftmost (Leaf 3)
3
>>> leftmost (Node 5 (Leaf 6) (Leaf 7))
6
>>> map leftmost ts
[4,1,1,1,3,1]
leftmost = undefined
| The integer at the right-most node of a binary tree.
>>> rightmost (Leaf 3)
3
>>> rightmost (Node 5 (Leaf 6) (Leaf 7))
7
>>> map rightmost ts
[9,9,5,5,5,3]
rightmost = undefined
| Get the maximum integer from a binary tree.
>>> maxInt (Leaf 3)
3
>>> maxInt (Node 5 (Leaf 4) (Leaf 2))
5
>>> maxInt (Node 5 (Leaf 7) (Leaf 2))
7
>>> map maxInt ts
[9,9,5,5,5,5]
maxInt = undefined
| Get the minimum integer from a binary tree.
>>> minInt (Leaf 3)
3
>>> minInt (Node 2 (Leaf 5) (Leaf 4))
2
>>> minInt (Node 5 (Leaf 4) (Leaf 7))
4
>>> map minInt ts
[1,1,1,1,1,1]
minInt = undefined
| Get the sum of the integers in a binary tree.
>>> sumInts (Leaf 3)
3
>>> sumInts (Node 2 (Leaf 5) (Leaf 4))
11
>>> sumInts (Node 10 t1 t2)
100
>>> map sumInts ts
[45,45,15,15,15,15]
sumInts = undefined
| The list of integers encountered by a pre-order traversal of the tree.
>>> preorder (Leaf 3)
[3]
>>> preorder (Node 5 (Leaf 6) (Leaf 7))
[5,6,7]
>>> preorder t1
[1,2,3,4,5,6,7,8,9]
>>> preorder t2
[6,2,1,4,3,5,8,7,9]
>>> map preorder [t3,t4,t5,t6]
[[3,2,1,4,5],[3,1,4,2,5],[4,2,3,1,5],[2,1,4,5,3]]
preorder = undefined
| The list of integers encountered by an in-order traversal of the tree.
>>> inorder (Leaf 3)
[3]
>>> inorder (Node 5 (Leaf 6) (Leaf 7))
[6,5,7]
>>> inorder t1
[4,3,5,2,6,1,8,7,9]
>>> inorder t2
[1,2,3,4,5,6,7,8,9]
>>> map inorder [t3,t4,t5,t6]
[[1,2,4,3,5],[1,3,2,4,5],[3,2,1,4,5],[1,2,5,4,3]]
inorder = undefined
| Check whether a binary tree is a binary search tree.
>>> isBST (Leaf 3)
True
>>> isBST (Node 5 (Leaf 6) (Leaf 7))
False
>>> map isBST ts
[False,True,False,False,False,False]
isBST = undefined
| Check whether a number is contained in a binary search tree.
You should assume that the given tree is a binary search tree
and *not* explore branches that cannot contain the value if
this assumption holds. The last two test cases violate the
assumption, but are there to help ensure that you do not
explore irrelevant branches.
>>> inBST 2 (Node 5 (Leaf 2) (Leaf 7))
True
>>> inBST 3 (Node 5 (Leaf 2) (Leaf 7))
False
>>> inBST 4 t2
True
>>> inBST 10 t2
False
>>> inBST 4 t3
False
>>> inBST 2 t4
False
inBST = undefined
Reviews
There are no reviews yet.