struct node* Delete(struct node* root, char* data) {
if (root == NULL) return root;
else if (strcmp(data, root->key) < 0) root->left = Delete(root->left, data);
else if(strcmp(data, root->key) > 0) root->right = Delete(root->left, data);
else {
//no child
if (root->left == NULL && root->right == NULL) {
free(root);
root = NULL;
}
//one child
else if (root->left == NULL) {
struct node* temp = root;
root = root->right;
free(temp);
}
else if (root->right == NULL) {
struct node* temp = root;
root = root->left;
free(temp);
}
else {
struct node* temp = FindMin(root->right);
root->key = temp->key;
root->right = Delete(root->right, temp->key);
}
}
return root;
}