LeetCode 235二叉搜索树的最近公共祖先 701二叉搜索树中的插入操作 450删除二叉搜索树中的节点 | 代码随想录25期训练营day22

LeetCode 235 二叉搜索树的最近公共祖先 2023.11.15

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
    //退出递归条件:遍历节点为空时返回空
    if(root == NULL)
        return NULL;
    //要搜索的节点都在根节点右侧时,遍历右节点
    if(root->val < p->val && root->val < q->val)
        return lowestCommonAncestor(root->right, p, q);
    //要搜索的节点都在根节点左侧时,遍历左节点
    else if(root->val > p->val && root->val > q->val)
        return lowestCommonAncestor(root->left, p, q);
    //其他情况,包括当前遍历节点为p、q其中一节点或p、q节点分别在遍历节点左边和右边时
    else
        return root;
}

LeetCode 701 二叉搜索树中的插入操作 2023.11.15

TreeNode* insertIntoBST(TreeNode* root, int val) {
//在不重复值的二叉搜索树中插入一个新节点,始终可以将其插在某一叶子结点上
//退出递归条件,遍历到叶子结点的下一个节点时,赋值给该节点并返回
if(root == NULL)
{
root = new TreeNode(val);
return root;
}
//当遍历节点值大于插入值时,遍历左子树并返回
if(val < root->val)
root->left = insertIntoBST(root->left, val);
//当遍历节点值小于插入值时,遍历右子树并返回
else if(val > root->val)
root->right = insertIntoBST(root->right, val);
return root;
}

LeetCode 450 删除二叉搜索树中的节点 2023.11.15

//我做的时候没有删除搜索节点的内存
TreeNode* deleteNode(TreeNode* root, int key) {
    //判断递归失效条件:没找到key值或者节点为空,返回空
    if(root == NULL)
        return NULL;
    //当节点值小于搜索值,则遍历右节点
    if(root->val < key)
        root->right = deleteNode(root->right, key);
    //当节点值大于搜索值,则遍历左节点
    else if(root->val > key)
        root->left = deleteNode(root->left, key);
    //当节点值等于搜索值,则做处理
    else
    {
        //删除节点左右节点都存在时,把右树放在左树的最右下节点,因为右树上所有节点大于左树
        if(root->left && root->right)
        {
            TreeNode* node = root->left;
            while (node->right)
                node = node->right;
            node->right = root->right;
            return root->left;
        }
        //删除节点左节点存在,右节点不存在时,返回左节点
        else if(root->left && root->right == NULL)
            return root->left;
        //删除节点右节点存在,左节点不存在时,返回右节点
        else if(root->left == NULL && root->right)
            return root->right;
        //删除节点左右节点都不存在时,返回空
        else
            return NULL;   
    }
    return root;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值