Code:struct node { int data; struct node *left, *right; }; struct node *root=NULL; int main() { root=insert(root,100); insert(root,80); insert(root,10); insert(root,40); insert(root,90); insert(root,30); insert(root,120); insert(root,140); inorder(root); printf("Min: %d Max: %d\n", FindMin(root), FindMax(root)); delete(root,80); printf("After deletion:\n"); inorder(root); return 0; } struct node *insert(struct node *node, int data) { if(node==NULL) { return newnode(data); } else if(data < node->data) { node->left=insert(node->left, data); } else if(data > node->data) { node->right=insert(node->right,data); } return node; } struct node *newnode(int data) { struct node *tmp=(struct node*)malloc(sizeof(struct node)); tmp->data=data; tmp->left=tmp->right=NULL; return tmp; } struct node *inorder(struct node *root) { if(root!=NULL) { inorder(root->left); printf("%d\n",root->data); inorder(root->right); } } struct node *FindMin(struct node *root) { if(root==NULL) { printf("Tree is empty!\n"); return -1; } while(root->left!=NULL) { root=root->left; } return root->data; } struct node *FindMax(struct node *root) { if(root==NULL) { printf("Tree is empty!\n"); return -1; } while(root->right!=NULL) { root=root->right; } return root->data; } struct node *delete(struct node *root, int data) { if(root==NULL) { printf("Tree is empty!\n"); return -1; } else if(data < root->data) { root->left=delete(root->left, data); } else if(data > root->data) { root->right=delete(root->right, data); } else { if(root->left==NULL && root->right==NULL) { free(root); root=NULL; } else if(root->left==NULL) { struct node *tmp=root; // tmp=root; root=root->right; free(tmp); } else if(root->right==NULL) { struct node *tmp=root; // tmp=root; root=root->left; free(tmp); } else { struct node *tmp=FindMin(root->right); root->data=tmp->data; root->right=delete(root->right,tmp->data); } } return root; }