public interface Tree { boolean empty(); int height(); // height of tree T search(T x); // search for something .compareTo(x)==0 Tree insert(T x); // insert into tree, usages: t = t.insert(x); Tree delete(T x); // search and delete x from tree, t=t.delete(x); int size(); // other methods (not implemented in Bst2020.java) default Object traverse() {return null;} //generic action with default default Tree makeclone() { return null; } default T leastitem() { return null; } default int width(int hdistance) { return 0; } default boolean isBst(T min, T max) { return true; } }// Tree interace, designed to have two subclasses (nil and vertex) /* Recent versions of Java have added the ability to not only declare functions but to also provide default implementations. This is just a convenience. It somewhat obscures the distinction between an interface and an abstract class, but unlike a class, you can't have instance variables and you can't refer to 'this'. This feature should not distract from your understanding of interfaces as purely abstract declarations. I only used this feature here so that my code will compile without implementing these functions: you will provide more interesting versions these functions in your program. */