Write a C++ function to delete the given value from the binary search tree. The function takes two arguments, tree node and value of the node to be deleted. Also replace the node to be deleted with maximum value from left sub tree when the node has two children. void deleteNode(TreeNode *node, int key) struct TreeNode { int key; TreeNode *left; TreeNode *right; TreeNode *parent; }; For example: 7 / \\ 5 15 / \\ / 1 6 9 \\ 2 \\ 3 \\ 4 If 5 is deleted, then replace it with the maximum value in its left subtree which is 4. The final tree: 7 / \\ 4 15 / \\ / 1 6 9 \\ 2 \\ 3 Solution #include <iostream> #include<cstdio> using namespace std; struct Node{ int data; struct Node *left; struct Node *right; }; Node* FindMin(Node* root){ while(root->left != NULL) root = root->left; return root; } struct Node* Delete(struct Node *root, int data){ if(root == NULL) return root; else if(data < root->data) root->left = Delete(root->left,data); else if(data > root->data) root->right = Delete(root->right, data); else { // Case 1: No Child if(root->left == NULL && root->right == NULL){ delete root; root = NULL; // Case 2: one child } else if(root->left == NULL){ struct Node *temp = root; root = root->right; delete temp; } else if(root->right == NULL){ struct Node *temp = root; root = root->left; delete temp; } else{ struct Node *temp = FindMin(roo t->right == NULL){ delete root; root = NULL; // Case 2: one child } else if(root->left == NULL){ struct Node *temp = root; root = root->right; delete temp; } else if(root->right == NULL){ struct Node *temp = root; root = root->left; delete temp; } else{ struct Node *temp = FindMin(roo->data); } } return root; } void Inorder(Node *root){ if(root == NULL) return; Inorder(root->left); printf(\"%d \",root->data); Inorder(root->right); } Node* Insert(Node *root, char data){ if(root == NULL){ root = new Node(); root->data = data; .