The following public functions are supported:
BinarySearchTree()  : Default Constructor
->The following functions are iterative:
void insertIterative(k const key, v const value) :  insert a value with the specific key by creating a new node. if the key already exists, it simply overwrites the value
void deleteKeyIterative(k const key)  :   delete the node containing the specific key.
->The following functions use recursion(they make use of other private recursive member functions):	
BinarySearchTree(BinarySearchTree<k, v> const& that)  :  Overloaded constructor that deep copies another Binary Search Tree Object.
void insert(k const  key, v const value)   :  	insert a value with the specific key by creating a new node. if the key already exists, it simply overwrites the value
v* search(k const key)     :  Find the value of the node which has the given key.
void inorderPrintKeys() :  print keys in inorder fashion.
void deleteAll()   :  delete all nodes of binary search tree.
void deleteKey(k key) :  delete the node containing the given key.
int length() :  returns total number of nodes of Binary Search tree (total number of nodes is equal to the total number of keys.)
~BinarySearchTree()  :  Destructor