#include <stdio.h>
#include<malloc.h>
struct node
{
int data;
struct node * left,* right;
} ;
struct node * root= NULL;
int findmin( struct node * root) ;
struct node * insert( struct node * root, int val)
{
struct node * par= NULL,* cur,* nn;
nn
= ( struct node
* ) malloc ( sizeof ( struct node
* ) ) ; nn-> data= val;
nn-> left= nn-> right= NULL;
if ( root== NULL)
{
root= nn;
return root;
}
cur= root;
while ( cur!= NULL)
{
par= cur;
if ( val< cur-> data)
cur= cur-> left;
else
cur= cur-> right;
}
if ( val< par-> data)
par-> left= nn;
else
par-> right= nn;
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) ;
// Wohoo... I found you, Get ready to be deleted
else {
// Case 1: No child
if ( root-> left == NULL && root-> right == NULL) {
root = NULL;
}
//Case 2: One child
else if ( root-> left == NULL) {
struct Node * temp = root;
root = root-> right;
}
else if ( root-> right == NULL) {
struct Node * temp = root;
root = root-> left;
}
// case 3: 2 children
else {
struct Node * temp = FindMin( root-> right) ;
root-> data = temp-> data;
root-> right = Delete( root-> right, temp-> data) ;
}
}
return root;
}
void inorder( struct node * root)
{
if ( root!= NULL)
{
inorder( root-> left) ;
inorder( root-> right) ;
}
}
int findmin( struct node * root)
{
if ( ( root== NULL) || ( root-> left== NULL) )
return root;
else
return findmin( root-> left) ;
}
int main( )
{
int ln, tn, s, l;
root= insert( root, 23 ) ;
root= insert( root, 20 ) ;
root= insert( root, 25 ) ;
root= insert( root, 21 ) ;
root= insert( root, 19 ) ;
root= insert( root, 24 ) ;
root= insert( root, 27 ) ;
root= insert( root, 28 ) ;
root= insert( root, 26 ) ;
root= insert( root, 29 ) ;
root= insert( root, 22 ) ;
root= delete( root, 27 ) ;
inorder( root) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlPG1hbGxvYy5oPgoKc3RydWN0IG5vZGUKewogCWludCBkYXRhOwogCXN0cnVjdCBub2RlICpsZWZ0LCpyaWdodDsKfTsKCnN0cnVjdCBub2RlICpyb290PU5VTEw7CgppbnQgZmluZG1pbihzdHJ1Y3Qgbm9kZSAqcm9vdCk7CgpzdHJ1Y3Qgbm9kZSAqaW5zZXJ0KHN0cnVjdCBub2RlICpyb290LGludCB2YWwpCnsKCXN0cnVjdCBub2RlICpwYXI9TlVMTCwqY3VyLCpubjsKCW5uPShzdHJ1Y3Qgbm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSopKTsKCW5uLT5kYXRhPXZhbDsKCW5uLT5sZWZ0PW5uLT5yaWdodD1OVUxMOwoJCglpZihyb290PT1OVUxMKQoJewoJCXJvb3Q9bm47CgkJcmV0dXJuIHJvb3Q7Cgl9CgkKCWN1cj1yb290OwoJCgl3aGlsZShjdXIhPU5VTEwpCgl7CgkJcGFyPWN1cjsKCQlpZih2YWw8Y3VyLT5kYXRhKQoJCQljdXI9Y3VyLT5sZWZ0OwoJCWVsc2UKCQkJY3VyPWN1ci0+cmlnaHQ7Cgl9CgkKCWlmKHZhbDxwYXItPmRhdGEpCgkJCXBhci0+bGVmdD1ubjsKCQllbHNlCgkJCXBhci0+cmlnaHQ9bm47CgkJCQoJcmV0dXJuIHJvb3Q7Cn0KCnN0cnVjdCBub2RlICpEZWxldGUoc3RydWN0IG5vZGUgKnJvb3QsaW50IGRhdGEpCnsKCWlmKHJvb3QgPT0gTlVMTCkgcmV0dXJuIHJvb3Q7IAoJZWxzZSBpZihkYXRhIDwgcm9vdC0+ZGF0YSkgcm9vdC0+bGVmdCA9IERlbGV0ZShyb290LT5sZWZ0LGRhdGEpOwoJZWxzZSBpZiAoZGF0YSA+IHJvb3QtPmRhdGEpIHJvb3QtPnJpZ2h0ID0gRGVsZXRlKHJvb3QtPnJpZ2h0LGRhdGEpOwoJLy8gV29ob28uLi4gSSBmb3VuZCB5b3UsIEdldCByZWFkeSB0byBiZSBkZWxldGVkCQoJZWxzZSB7CgkJLy8gQ2FzZSAxOiAgTm8gY2hpbGQKCQlpZihyb290LT5sZWZ0ID09IE5VTEwgJiYgcm9vdC0+cmlnaHQgPT0gTlVMTCkgeyAKCQkJZnJlZShyb290KTsKCQkJcm9vdCA9IE5VTEw7CgkJfQoJCS8vQ2FzZSAyOiBPbmUgY2hpbGQgCgkJZWxzZSBpZihyb290LT5sZWZ0ID09IE5VTEwpIHsKCQkJc3RydWN0IE5vZGUgKnRlbXAgPSByb290OwoJCQlyb290ID0gcm9vdC0+cmlnaHQ7CgkJCQlmcmVlKHRlbXApOwoJCX0KCQllbHNlIGlmKHJvb3QtPnJpZ2h0ID09IE5VTEwpIHsKCQkJc3RydWN0IE5vZGUgKnRlbXAgPSByb290OwoJCQlyb290ID0gcm9vdC0+bGVmdDsKCQkJZnJlZSh0ZW1wKTsKCQl9CgkJLy8gY2FzZSAzOiAyIGNoaWxkcmVuCgkJZWxzZSB7IAoJCQlzdHJ1Y3QgTm9kZSAqdGVtcCA9IEZpbmRNaW4ocm9vdC0+cmlnaHQpOwoJCQlyb290LT5kYXRhID0gdGVtcC0+ZGF0YTsKCQkJcm9vdC0+cmlnaHQgPSBEZWxldGUocm9vdC0+cmlnaHQsdGVtcC0+ZGF0YSk7CgkJfQoJfQoJcmV0dXJuIHJvb3Q7CgkJCn0KCnZvaWQgaW5vcmRlcihzdHJ1Y3Qgbm9kZSAqcm9vdCkKewoJaWYocm9vdCE9TlVMTCkKCXsKCQlpbm9yZGVyKHJvb3QtPmxlZnQpOwoJCXByaW50ZigiXHQlZCIscm9vdC0+ZGF0YSk7CgkJaW5vcmRlcihyb290LT5yaWdodCk7Cgl9Cn0KCmludCBmaW5kbWluKHN0cnVjdCBub2RlICpyb290KQp7CglpZigocm9vdD09TlVMTCl8fChyb290LT5sZWZ0PT1OVUxMKSkKCQlyZXR1cm4gcm9vdDsKCWVsc2UKCQlyZXR1cm4gZmluZG1pbihyb290LT5sZWZ0KTsKCn0KCmludCBtYWluKCkKewoJaW50IGxuLHRuLHMsbDsKCQoJcm9vdD1pbnNlcnQocm9vdCwyMyk7Cglyb290PWluc2VydChyb290LDIwKTsKCXJvb3Q9aW5zZXJ0KHJvb3QsMjUpOwoJcm9vdD1pbnNlcnQocm9vdCwyMSk7Cglyb290PWluc2VydChyb290LDE5KTsKCXJvb3Q9aW5zZXJ0KHJvb3QsMjQpOwoJcm9vdD1pbnNlcnQocm9vdCwyNyk7Cglyb290PWluc2VydChyb290LDI4KTsKCXJvb3Q9aW5zZXJ0KHJvb3QsMjYpOwoJcm9vdD1pbnNlcnQocm9vdCwyOSk7Cglyb290PWluc2VydChyb290LDIyKTsKCglyb290PWRlbGV0ZShyb290LDI3KTsKCglwcmludGYoIlxuIik7Cglpbm9yZGVyKHJvb3QpOwoKCXByaW50ZigiXG4iKTsKcmV0dXJuIDA7Cn0=
compilation info
prog.c: In function 'Delete':
prog.c:60:24: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
struct Node *temp = root;
^
prog.c:65:24: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
struct Node *temp = root;
^
prog.c:71:24: warning: implicit declaration of function 'FindMin' [-Wimplicit-function-declaration]
struct Node *temp = FindMin(root->right);
^
prog.c:71:24: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
prog.c:72:21: error: dereferencing pointer to incomplete type 'struct Node'
root->data = temp->data;
^
prog.c: In function 'findmin':
prog.c:93:10: warning: return makes integer from pointer without a cast [-Wint-conversion]
return root;
^
prog.c: In function 'main':
prog.c:115:7: warning: implicit declaration of function 'delete' [-Wimplicit-function-declaration]
root=delete(root,27);
^
prog.c:115:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
root=delete(root,27);
^
prog.c:101:14: warning: unused variable 'l' [-Wunused-variable]
int ln,tn,s,l;
^
prog.c:101:12: warning: unused variable 's' [-Wunused-variable]
int ln,tn,s,l;
^
prog.c:101:9: warning: unused variable 'tn' [-Wunused-variable]
int ln,tn,s,l;
^
prog.c:101:6: warning: unused variable 'ln' [-Wunused-variable]
int ln,tn,s,l;
^
stdout