// Binarysearchtree. H -- 2011-07-27-17.14class binarysearchtree {public: Enum direction {direction_left, direction_right}; typedef int item; typedef struct node {item; struct node * left, * right;} node; private: node * m_root; int m_current; node * m_makenode (const item); void m_print (const node & node); node * m_leftmostorrightmostnode (node * const pnode, const direction direcomefro M); void m_removeall (node * pnode); Public: binarysearchtree (void); bool isempty (void); bool insert (const item); bool remove (const item ); void print (void); // if you called values () // will change the tree to a two way circulation linked list and print all the elements in diminsihing order and increment order, // and empty the tree T last. Void becometoatwowaycirculationdefine listandprintitandemptythetree (const direction headdirection );~ Binarysearchtree (void );};