#include <iostream>
#include <algorithm>
using namespace std;
struct node {
int data;
struct node* left;
struct node* right;
};
node* Insert(node* root, int data)
{
if (root == NULL)
{
root = new node;
root->left = root->right = NULL;
root->data = data;
return root;
}
}
node* FindMinNode(node* root)
{
node* min = root;
while (min->left != NULL)
{
min = min->left;
}
return min;
}
node* Delete(node* root, int data)
{
node* tmpRoot = NULL;
if (root == NULL)
{
return NULL;
}
if (root->data < data)
{
root->right = Delete(root->right, data);
}
else if (root->data > data)
{
root->left = Delete(root->left, data);
}
else
{
if (root->left != NULL && root->right != NULL)
{
tmpRoot = FindMinNode(root->right);
root->data = tmpRoot->data;
root->right = Delete(root->right, tmpRoot->data);
}
else
{
tmpRoot = (root->left == NULL) ? root->right : root->left;
delete root;
return tmpRoot;
}
}
}
int main()
{
return 0;
}