Delete a Node in BST
// code here:
TreeNode* inSuc(TreeNode* root){
TreeNode* cur = root;
while(cur->left) cur = cur->left;
return cur;
}
TreeNode* deleteNode(TreeNode* root, int k){
int cur = root->data;
if(cur < k){
root->right = deleteNode(root->right, k);
}
else if(cur > k){
root->left = deleteNode(root->left, k);
}
else{
if(root->left == NULL and root->right == NULL){
free(root);
return NULL;
}
else if(root->left == NULL){
TreeNode* tmp = root->right;
free(root);
return tmp;
}
else if(root->right == NULL){
TreeNode* tmp = root->left;
free(root);
return tmp;
}
//2 children case:
//find in successor
TreeNode* tmp = inSuc(root->right);
root->data = tmp->data;
root->right = deleteNode(root->right, tmp->data);
}
return root;
}

Comments
Post a Comment