Define a binary search trees as follows: struct node { int element; // stores number struct node *left; // left child struct node *right; // right child struct node *parent; // parent } typedef struct node *Tree; // points to the root We will store numbers in a binary search tree in an ordered fashion. This means that the numbers in the left subtree of a node are are less than the number at the node, and the numbers in the right subtree of the node are all bigger than the number at the node. Write functions to insert and search in the tree with the following declaration: /* Inserts number in the tree T and returns a pointer to the tree */ Tree insert_number(int number, Tree T) ; /* Searches for number in the tree T and returns a pointer to the node * storing the number. */ Tree search_number(int number, Tree T); Also, write a main() function that takes any sequence of input operations, each operation given by (s n) (for searching number n in the tree) and (i n) (for inserting number n in the tree) and produces appropriate output. You may wish to compare the performance of this with the program written in Monday's lab! --------------------------------------------------------------------------------------