# Assignment 3: Binary Search Tree

### (Submit at moodle.)

Suppose you are given a binary tree which has (all distinct) integer values in its nodes. We say it is a binary search tree if all the numbers in the right subtree of a node have values greater than the root and all the numbers in the left subtree have values smaller than the root (as discussed in class).

In this assignment you will be given a binary tree with numbers at nodes and you will have to check if the binary satisfies the condition of being a binary search tree.

NOTE: If the tree is not a binary search tree your program should point out where the condition fails i.e. it should return the value at a given node and another value from either its left subtree (which is greater than the value at the node) or its right subtree (which is less than the value at the node).

The input will be given by file. The format will be as follows:
• Each node will specified along with the values at its two children: e.g. (2:1,4) is a node whose left child has value 1 and right child has value 4 in it. If a node does not have a particular child then the value null will appear e.g. if a node with value 20 has a left child with value 5 and no right child, you will fine (20:5,null) in the input.
• There will be no specified order on the tuples given in the input i.e. you will not specifically be told what the root is. You will have to find the root by checking to see which value does not appear as a child of any other value e.g. consider: (10:7,12), (1:null,10), (7:null,null), (12:null,null). In this tree, the root is 1 because it has no parent.
• If the input does not constitute a valid binary tree your program should point out the error and say which node is not properly specified. Consider the example: (10:7,12), (1:null,10), (7:null,null). Here 12 appears as a child but the input doesn't specify what its children are. This is an error in the input and your program should catch it.

### Implementation Notes:

• You have to take the input and make a binary tree out of it first and then check for the condition i.e. your assignment should contain a binary tree implementation and an algorithm for traversing the binary tree to check for the condition.
• You are allowed to read up on the binary tree implementation from the book but you have to type it in and test it yourself.
• The honor code must be follow for all assignments
• The program should work on linux with java 1.6 (You could test it on one of the computer center machines or one of the CSE general computing lab machines.)