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* rootint 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

Popular Posts