1  import java.util.Collection;
  2  
  3  public interface Tree<E> extends Collection<E> {
  4    /** Return true if the element is in the tree */
  5    public boolean search(E e);
  6  
  7    /** Insert element e into the binary tree
  8     * Return true if the element is inserted successfully */
  9    public boolean insert(E e);
 10  
 11    /** Delete the specified element from the tree
 12     * Return true if the element is deleted successfully */
 13    public boolean delete(E e);
 14    
 15    /** Get the number of elements in the tree */
 16    public int getSize();
 17    
 18    /** Inorder traversal from the root*/
 19    public default void inorder() {
 20    }
 21  
 22    /** Postorder traversal from the root */
 23    public default void postorder() {
 24    }
 25  
 26    /** Preorder traversal from the root */
 27    public default void preorder() {
 28    }
 29    
 30    @Override /** Return true if the tree is empty */
 31    public default boolean isEmpty() {
 32      return this.size() == 0;
 33    }
 34  
 35    @Override
 36    public default boolean contains(Object e) {
 37      return search((E)e);
 38    }
 39    
 40    @Override
 41    public default boolean add(E e) {
 42      return insert(e);
 43    }
 44    
 45    @Override
 46    public default boolean remove(Object e) {
 47      return delete((E)e);
 48    }
 49    
 50    @Override
 51    public default int size() {
 52      return getSize();
 53    }
 54    
 55    @Override
 56    public default boolean containsAll(Collection<?> c) {
 57      // Left as an exercise
 58      return false;
 59    }
 60  
 61    @Override
 62    public default boolean addAll(Collection<? extends E> c) {
 63      // Left as an exercise
 64      return false;
 65    }
 66  
 67    @Override
 68    public default boolean removeAll(Collection<?> c) {
 69      // Left as an exercise
 70      return false;
 71    }
 72  
 73    @Override
 74    public default boolean retainAll(Collection<?> c) {
 75      // Left as an exercise
 76      return false;
 77    }
 78  
 79    @Override
 80    public default Object[] toArray() {
 81      // Left as an exercise
 82      return null;
 83    }
 84  
 85    @Override
 86    public default <T> T[] toArray(T[] array) {
 87      // Left as an exercise
 88      return null;
 89    }
 90  }