write a JAVA binary search tree program with the following criteria: _________________________________________________________________ Description: Create a class called BinSearchTree. BinSearchTree will implement a binary search tree. BinSearchTree will be a GENERIC class storing a value of the generic type. It should have the following methods. The methods should all operate on the object making the call (none are static). 10 points a) add Adds a node to the tree containing the passed value. 10 points b) find Returns true if the value passed is in the tree. 10 points c) leafCount Returns the count of all of the leaves in the tree. 10 points d) height Returns the height of the tree. 10 points e) balance Rebuilds the tree to minimum height. 10 points f) isPerfect Returns true if the tree is a perfect tree. (A perfect tree is filled at every level). 10 points g) numLevels Returns the number of levels in the tree. 10 points h) isMirror Returns true if the left subtree structure is a mirror of the right subtree 10 points i) PreorderPrint Prints node values using a preorder traversal. 10 points j) Main Demonstrates all of the above methods.