public class BinarySearchTree extends BinaryTree implements Tree { //Data protected java.util.Comparator c; //Constructors public BinarySearchTree() { this(new NaturalComparator()); } public BinarySearchTree(java.util.Comparator c) { this(c,null); } public BinarySearchTree(java.util.Comparator c,TreeNode n) { super
; this.c = c; } //Access methods - inherited from class BinaryTree public java.util.Comparator getComparator() { return c; } //Override methods public BinaryTree getLeftSubtree() { return isEmpty() ? null : new BinarySearchTree(c,root.left); } public BinaryTree getRightSubtree() { return isEmpty() ? null : new BinarySearchTree(c,root.right); } //Tree methods - inherited from class BinaryTree //Override methods public void add(Object element) { if(isEmpty()) root = new TreeNode(element); else if(c.compare(element,root.data) <= 0) if(root.left == null) root.left = new TreeNode(element); else getLeftSubtree().add(element); else if(root.right == null) root.right = new TreeNode(element); else getRightSubtree().add(element); } public Object remove(Object element) { throw new UnsupportedOperationException(); } public boolean contains(Object element) { throw new UnsupportedOperationException(); } }