You are on page 1of 2

Node *findmin(Node *root){

if(!root) return NULL;


while(root->left)
root=root->left;
return root;
}
Node * deleteNode(Node *root, int x)
{
if(!root) return NULL;

if(x < root->data)


root->left= deleteNode(root->left, x);
else if(root->data < x)
root->right= deleteNode(root->right, x);
else{

// no child
if(!root->left && !root->right){
delete root;
return NULL;
}
// one child
else if(root->right && !root->left){
Node *t=root->right;
delete root;
return t;
}
else if(root->left && !root->right){
Node *t=root->left;
delete root;
return t;
}
else{
Node *t= findmin(root->right);
root->data= t->data;
root->right=deleteNode(root->right, t->data);
return root;
}
}
}

/// following code also works

Node *findmin(Node *root){


if(!root) return NULL;
while(root->left)
root=root->left;
return root;
}
Node * deleteNode(Node *root, int x)
{
if(!root) return NULL;

if(x < root->data)


root->left= deleteNode(root->left, x);
else if(root->data < x)
root->right= deleteNode(root->right, x);
else{
// no child
if(!root->left && !root->right){
return NULL;
}
// one child
else if(root->right && !root->left){
return root->right;
}
else if(root->left && !root->right){
return root->left;
}
else{
Node *t= findmin(root->right);
root->data= t->data;
root->right=deleteNode(root->right, t->data);
return root;
}
}
}

You might also like