代码随想录刷题攻略---二叉搜索树3--删除结点

例题

1.确定参数及返回值

2.确定终止条件

        若找到了与key值匹配的结点,我们对其进行删除操作,若该结点没有子树,则删除后只剩NULL,返回NULL即可;若该结点只有一颗子树(左or右),删除此结点只剩其子树,返回其子树即可;若该结点的两颗子树都存在,处理比较复杂;首先要将两颗子树合并为一颗并返回,此时可以将左子树挂在右子树的最左边,或将右子树挂在左子树的最右边,再返回整合后的子树。

3.确定单层递归的逻辑

        在单层递归中,若当前结点的值符合key值,按照终止条件处理;若不符合key值,根据BST的特点,继续去左子树或者右子树中寻找删除结点,并在本层使用root->left或者root->right来接住下一层返回的子树。

code: 

class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
        if(root == nullptr)
        return root;
        if(root->val == key)//当前结点值为key时,对应的五种情况
        {
            if(!root->left && !root->right)
            return nullptr;
            else if(root->left && !root->right)
            return root->left;
            else if(!root->left && root->right)
            return root->right;
            else
            {
                TreeNode* p=root->right;
                while(p->left != NULL)
                    p=p->left;
                p->left=root->left;
                return root->right;
            }
        }
        //递归开始
        if(root->val > key)
            root->left = deleteNode(root->left,key);
        if(root->val < key)
            root->right = deleteNode(root->right,key);
        return root;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值