Skip to content

Instantly share code, notes, and snippets.

@mirsahib
Created November 23, 2017 05:51
Show Gist options
  • Save mirsahib/ad25e05603b7c4d7cdacacc5af190217 to your computer and use it in GitHub Desktop.
Save mirsahib/ad25e05603b7c4d7cdacacc5af190217 to your computer and use it in GitHub Desktop.
Node* deleteNode(int value,Node* node){
if(node==NULL){
return node;
}else if(value< node->data){
//value is less than node data
node->left = deleteNode(value,node->left);
}else if(value>node->data){
//value is more than node data
node->right = deleteNode(value,node->right);
}else{
//value is equal to node data
if(node->left==NULL && node->right==NULL){
//node is a leaf (case 1)
delete node;
node = NULL;
}else if(node->left!=NULL && node->right==NULL){
// node with only left child
Node* temp = node;
node = node->left;
delete temp;
}else if(node->left==NULL && node->right!=NULL){
//node with only right child
Node* temp = node;
node = node->right;
delete temp;
}else{
//node is a root
Node* temp = minimum(node->right);
node->data = temp->data;
node->right = deleteNode(temp->data,node->right);
//delete temp;
}
}
return node;
}
Node* minimum(Node* node){
Node* curr = node;
while(curr->left!=NULL){
curr=curr->left;
}
return curr;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment