Write a test client for BinarySearchTree that checks the imp
Write a test client for BinarySearchTree that checks the implementation of the following methods:
min ()
max ()
keys ()
select ()
rank (), floor (), ceiling ()
For example, the client for size () is:
StdOut.println(\"size = \" + st.size());
Solution
import java.util.Iterator;
 import java.util.NoSuchElementException;
 import java.util.TreeMap;
public class ST<Key extends Comparable<Key>, Value> implements Iterable<Key>
 {
private TreeMap<Key, Value> st;
  
     public ST()
     {
         st = new TreeMap<Key, Value>();
     }
   
     public Value get(Key item)
     {
         if (item == null)
        throw new IllegalArgumentException(\"called get() with null key\");
         return st.get(item);
     }
  
     public void put(Key item, Value val)
     {
         if (item == null)
        throw new IllegalArgumentException(\"called put() with null key\");
         if (val == null)
        st.remove(item);
         else           
         st.put(item, val);
     }
     public void delete(Key item) {
         if (item == null)
        throw new IllegalArgumentException(\"called delete() with null key\");
         st.remove(item);
     }
     public boolean contains(Key item)
     {
         if (item == null)
        throw new IllegalArgumentException(\"called contains() with null key\");
         return st.containsKey(item);
     }
     public int size()
     {
         return st.size();
     }
  
     public boolean isEmpty()
     {
         return size() == 0;
     }
     public Iterable<Key> keys()
     {
         return st.keySet();
     }
     public Iterator<Key> iterator()
     {
         return st.keySet().iterator();
     }
    public Iterable<Key> keys()
     {
         return st.keySet();
     }
    public Key min()
     {
         if (isEmpty())
        throw new NoSuchElementException(\"called min() with empty symbol table\");
         return st.firstKey();
     }
     public Key max()
     {
         if (isEmpty())
        throw new NoSuchElementException(\"called max() with empty symbol table\");
         return st.lastKey();
     }
     public Key ceiling(Key item)
     {
         if (item == null)
        throw new IllegalArgumentException(\"called ceiling() with null key\");
         Key k = st.ceilingKey(item);
         if (k == null)
        throw new NoSuchElementException(\"all keys are less than \" + item);
         return k;
     }
  
     public Key floor(Key item)
     {
         if (key == null)
        throw new IllegalArgumentException(\"called floor() with null key\");
         Key k = st.floorKey(key);
         if (k == null)
        throw new NoSuchElementException(\"all keys are greater than \" + item);
         return k;
     }
    public static void main(String[] args)
     {
         ST<String, Integer> st = new ST<String, Integer>();
         for (int i = 0; !StdIn.isEmpty(); i++)
    {
             String item = StdIn.readString();
             st.put(item, i);
         }
        StdOut.println(\"min key: \" + st.min());
         StdOut.println(\"max key: \" + st.max());
         StdOut.println(\"size:    \" + st.size());
         StdOut.println();
        for (String s : st.keys())
             StdOut.println(s + \" \" + st.get(s));
     }
 }



