#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *left,*right;
};
struct node* insert(struct node* tree,int d)
{
if(tree==NULL)
{
struct node
* temp
=(struct node
*)malloc(sizeof(struct node
)); temp->data=d;
temp->right=temp->left=NULL;
tree=temp;
return tree;
}
if(d<tree->data)
tree->left=insert(tree->left,d);
else if(d>tree->data)
tree->right=insert(tree->right,d);
return tree;
}
struct node * minValueNode(struct node* node)
{
struct node* current = node;
/* loop down to find the leftmost leaf */
while (current && current->left != NULL)
current = current->left;
return current;
}
/* Given a binary search tree and a key, this function deletes the key
and returns the new root */
struct node* deleteNode(struct node* root, int key)
{
// base case
if (root == NULL) return root;
// If the key to be deleted is smaller than the root's key,
// then it lies in left subtree
if (key < root->data)
root->left = deleteNode(root->left, key);
// If the key to be deleted is greater than the root's key,
// then it lies in right subtree
else if (key > root->data)
root->right = deleteNode(root->right, key);
// if key is same as root's key, then This is the node
// to be deleted
else
{
// node with only one child or no child
if (root->left == NULL)
{
struct node *temp = root->right;
return temp;
}
else if (root->right == NULL)
{
struct node *temp = root->left;
return temp;
}
// node with two children: Get the inorder successor (smallest
// in the right subtree)
struct node* temp = minValueNode(root->right);
// Copy the inorder successor's content to this node
root->data = temp->data;
// Delete the inorder successor
root->right = deleteNode(root->right, temp->data);
}
return root;
}
void inorder(struct node *root)
{
if (root != NULL)
{
inorder(root->left);
inorder(root->right);
}
}
int main(void)
{
struct node* tree=NULL;
printf("enter the number of elements : "); int n;
int i,d;
for(i=0;i<n;i++)
{
tree=insert(tree,d);
}
inorder(tree);
tree=deleteNode(tree,33);
inorder(tree);
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgpzdHJ1Y3Qgbm9kZXsKCWludCBkYXRhOwoJc3RydWN0IG5vZGUgKmxlZnQsKnJpZ2h0Owp9OwoKc3RydWN0IG5vZGUqIGluc2VydChzdHJ1Y3Qgbm9kZSogdHJlZSxpbnQgZCkKewoJaWYodHJlZT09TlVMTCkKCXsKCQlzdHJ1Y3Qgbm9kZSogdGVtcD0oc3RydWN0IG5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKCQl0ZW1wLT5kYXRhPWQ7CgkJdGVtcC0+cmlnaHQ9dGVtcC0+bGVmdD1OVUxMOwoJCXRyZWU9dGVtcDsKCQlyZXR1cm4gdHJlZTsKCX0KCWlmKGQ8dHJlZS0+ZGF0YSkKCXRyZWUtPmxlZnQ9aW5zZXJ0KHRyZWUtPmxlZnQsZCk7CgllbHNlIGlmKGQ+dHJlZS0+ZGF0YSkKCXRyZWUtPnJpZ2h0PWluc2VydCh0cmVlLT5yaWdodCxkKTsKCXJldHVybiB0cmVlOwp9CnN0cnVjdCBub2RlICogbWluVmFsdWVOb2RlKHN0cnVjdCBub2RlKiBub2RlKSAKeyAKICAgIHN0cnVjdCBub2RlKiBjdXJyZW50ID0gbm9kZTsgCiAgCiAgICAvKiBsb29wIGRvd24gdG8gZmluZCB0aGUgbGVmdG1vc3QgbGVhZiAqLwogICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudC0+bGVmdCAhPSBOVUxMKSAKICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bGVmdDsgCiAgCiAgICByZXR1cm4gY3VycmVudDsgCn0gCiAgCi8qIEdpdmVuIGEgYmluYXJ5IHNlYXJjaCB0cmVlIGFuZCBhIGtleSwgdGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSBrZXkgCiAgIGFuZCByZXR1cm5zIHRoZSBuZXcgcm9vdCAqLwpzdHJ1Y3Qgbm9kZSogZGVsZXRlTm9kZShzdHJ1Y3Qgbm9kZSogcm9vdCwgaW50IGtleSkgCnsgCiAgICAvLyBiYXNlIGNhc2UgCiAgICBpZiAocm9vdCA9PSBOVUxMKSByZXR1cm4gcm9vdDsgCiAgCiAgICAvLyBJZiB0aGUga2V5IHRvIGJlIGRlbGV0ZWQgaXMgc21hbGxlciB0aGFuIHRoZSByb290J3Mga2V5LCAKICAgIC8vIHRoZW4gaXQgbGllcyBpbiBsZWZ0IHN1YnRyZWUgCiAgICBpZiAoa2V5IDwgcm9vdC0+ZGF0YSkgCiAgICAgICAgcm9vdC0+bGVmdCA9IGRlbGV0ZU5vZGUocm9vdC0+bGVmdCwga2V5KTsgCiAgCiAgICAvLyBJZiB0aGUga2V5IHRvIGJlIGRlbGV0ZWQgaXMgZ3JlYXRlciB0aGFuIHRoZSByb290J3Mga2V5LCAKICAgIC8vIHRoZW4gaXQgbGllcyBpbiByaWdodCBzdWJ0cmVlIAogICAgZWxzZSBpZiAoa2V5ID4gcm9vdC0+ZGF0YSkgCiAgICAgICAgcm9vdC0+cmlnaHQgPSBkZWxldGVOb2RlKHJvb3QtPnJpZ2h0LCBrZXkpOyAKICAKICAgIC8vIGlmIGtleSBpcyBzYW1lIGFzIHJvb3QncyBrZXksIHRoZW4gVGhpcyBpcyB0aGUgbm9kZSAKICAgIC8vIHRvIGJlIGRlbGV0ZWQgCiAgICBlbHNlCiAgICB7IAogICAgICAgIC8vIG5vZGUgd2l0aCBvbmx5IG9uZSBjaGlsZCBvciBubyBjaGlsZCAKICAgICAgICBpZiAocm9vdC0+bGVmdCA9PSBOVUxMKSAKICAgICAgICB7IAogICAgICAgICAgICBzdHJ1Y3Qgbm9kZSAqdGVtcCA9IHJvb3QtPnJpZ2h0OyAKICAgICAgICAgICAgZnJlZShyb290KTsgCiAgICAgICAgICAgIHJldHVybiB0ZW1wOyAKICAgICAgICB9IAogICAgICAgIGVsc2UgaWYgKHJvb3QtPnJpZ2h0ID09IE5VTEwpIAogICAgICAgIHsgCiAgICAgICAgICAgIHN0cnVjdCBub2RlICp0ZW1wID0gcm9vdC0+bGVmdDsgCiAgICAgICAgICAgIGZyZWUocm9vdCk7IAogICAgICAgICAgICByZXR1cm4gdGVtcDsgCiAgICAgICAgfSAKICAKICAgICAgICAvLyBub2RlIHdpdGggdHdvIGNoaWxkcmVuOiBHZXQgdGhlIGlub3JkZXIgc3VjY2Vzc29yIChzbWFsbGVzdCAKICAgICAgICAvLyBpbiB0aGUgcmlnaHQgc3VidHJlZSkgCiAgICAgICAgc3RydWN0IG5vZGUqIHRlbXAgPSBtaW5WYWx1ZU5vZGUocm9vdC0+cmlnaHQpOyAKICAKICAgICAgICAvLyBDb3B5IHRoZSBpbm9yZGVyIHN1Y2Nlc3NvcidzIGNvbnRlbnQgdG8gdGhpcyBub2RlIAogICAgICAgIHJvb3QtPmRhdGEgPSB0ZW1wLT5kYXRhOyAKICAKICAgICAgICAvLyBEZWxldGUgdGhlIGlub3JkZXIgc3VjY2Vzc29yIAogICAgICAgIHJvb3QtPnJpZ2h0ID0gZGVsZXRlTm9kZShyb290LT5yaWdodCwgdGVtcC0+ZGF0YSk7IAogICAgfSAKICAgIHJldHVybiByb290OyAKfSAKCnZvaWQgaW5vcmRlcihzdHJ1Y3Qgbm9kZSAqcm9vdCkgCnsgCiAgICBpZiAocm9vdCAhPSBOVUxMKSAKICAgIHsgCiAgICAgICAgaW5vcmRlcihyb290LT5sZWZ0KTsgCiAgICAgICAgcHJpbnRmKCIlZCBcbiIsIHJvb3QtPmRhdGEpOyAKICAgICAgICBpbm9yZGVyKHJvb3QtPnJpZ2h0KTsgCiAgICB9IAp9IAoKaW50IG1haW4odm9pZCkKewoJc3RydWN0IG5vZGUqIHRyZWU9TlVMTDsKCXByaW50ZigiZW50ZXIgdGhlIG51bWJlciBvZiBlbGVtZW50cyA6ICIpOwoJaW50IG47CglzY2FuZigiJWQiLCZuKTsKCWludCBpLGQ7Cglmb3IoaT0wO2k8bjtpKyspCgl7CgkJcHJpbnRmKCJlbnRlciB0aGUgdmFsdWUgOiAiKTsKCQlzY2FuZigiJWQiLCZkKTsKCQl0cmVlPWluc2VydCh0cmVlLGQpOwoJfQoJaW5vcmRlcih0cmVlKTsKCXRyZWU9ZGVsZXRlTm9kZSh0cmVlLDMzKTsKCWlub3JkZXIodHJlZSk7Cn0KCgoKCgoK