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. Pickup functions from Tuesday's lab that insert and search in the tree. Write a function to delete a number from the tree with the following declaration: /* Deletes the number from the tree if it exists. Returns a pointer to the root * of the tree. */ Tree delete_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), (i n) (for inserting number n in the tree) and (d n) (for deleting 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!