Consider a binary search tree T with nodes containing the four fields key, left, right, p. and ht, where key is an integer, left, and right are pointers to the two subtrees, p is a pointer to the parent of the node, and ht is the height of the node (the maximum length of a path from this node to a leaf). Design an algorithm for a procedure insert (T, x) that inserts to a binary searches tree T a new node x (whose key is not in the tree yet), and updates lit fields accordingly. The function should work in O(h) time, where h is the length of the access path. Solution Algorithm is implemented in C: struct node { int key; struct node *left, *right; }; //function to create a new BST node struct node *new_Node(int item) { struct node *tem = (struct node *)malloc(sizeof(struct node)); tem->key = item; tem->left = tem->right = NULL; return tem; } /INSERT PROCEDURE /* Given key in BST,function to insert a new node. */ struct node* insert(struct node* T, int x) { /* If tree is empty then return a new node */ if (T == NULL) return new_Node(x); /* else, repeat down the tree */ if (x < T->x) T->left = insert(T->left, x); else if (key > node->key) T->right = insert(T->right, x); return T; }.