public class bst  // for Integer
{
  private TreeNode root;

public bst()
   {root = null;
   }

   public void add(Object obj)
    {TreeNode n = new TreeNode(obj,null,null);
     if (root == null)
       root = n;
     else
      insert(root,n);
    }

private void insert(TreeNode current, TreeNode t)
 {Integer i1 = (Integer)t.getValue();
  Integer i2 = (Integer)current.getValue();
   if (i1.compareTo(i2) < 0 && current.getLeft() == null)
   {current.setLeft(t);
    return;
   }
  else
   if (i1.compareTo(i2) >= 0 && current.getRight() == null)
   {current.setRight(t);
       return;
   }
   else
    if  (i1.compareTo(i2) < 0 )
      insert(current.getLeft(),t);
     else
       insert(current.getRight(),t);
 }

  public void print()
 	 {printer(root);
     }

   private void printer(TreeNode current)
 	 {if (current != null)
      {printer(current.getLeft());
       System.out.println(current.getValue());  // uses toString() of data object
       printer(current.getRight());
       }
      }

   public int countNodes()
    {return ctNodes(root);

    }
    private int ctNodes(TreeNode current)
     {if (current == null)
       return 0;
      return 1 + ctNodes(current.getLeft()) + ctNodes(current.getRight());
     }

public void printLeaves()
 {printLeavesHelper(root);
 }

 public void printLeavesHelper(TreeNode current)
  {if (current == null)
    return;
   if (current.getLeft() == null && current.getRight() ==null)
     System.out.println(current.getValue() ); //uses toString of data object
   else
    {printLeavesHelper(current.getLeft());
     printLeavesHelper(current.getRight());
  }  }

  public void deleteLeaves()
   {deleteLeavesHelper(root);
}

  public void deleteLeavesHelper(TreeNode current)
   {if (current != null)
    {
     if (current.getLeft() != null && (current.getLeft().getLeft()==null && current.getLeft().getRight() == null))
        current.setLeft(null);
     if (current.getRight() != null && (current.getRight().getLeft()==null && current.getRight().getRight() == null))
        current.setRight(null);
        deleteLeavesHelper(current.getLeft());
     deleteLeavesHelper(current.getRight());
	}
}

}___________________________________________________________________________________



import java.io.*;
public class treetest2
{

public static void main(String[] args) throws IOException
	{input in = new input();
		bst b = new bst();

	int n;
	System.out.println("Enter a number or -1 to end");
	n = in.getInt();
	while (n != -1)
	 {b.add(new Integer(n));
	  System.out.println("Enter a number or -1 to end");
	  	n = in.getInt();
      }
     b.print();
     System.out.println("Leaves are ");
     b.printLeaves();
     int ct = b.countNodes();       // no parameters required
     System.out.println("There are " + ct + " nodes");
     }
}