首页 > 其他分享 >LeetCode 450. 删除二叉搜索树中的节点

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

时间:2023-06-04 15:22:15浏览次数:36  
标签:right 450 树中 else del key root LeetCode left

class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
        del(root,key);
        return root;
    }
    void del(TreeNode* &root,int key)
    {
        if(!root)   return;
        if(key<root->val)    del(root->left,key);
        else if(key>root->val)    del(root->right,key);
        else
        {
            if(!root->left&&!root->right)//叶子节点直接删除
                root=nullptr;
            else if(!root->left)    root=root->right;
            else if(!root->right)   root=root->left;
            else//有两个孩子
            {
                //寻找后继
                auto p=root->right;
                while(p->left)    p=p->left;//这里不能直接传p,传p改变不了子树
                //覆盖根节点并删除后继
                root->val=p->val;
                del(root->right,p->val);
            }

        }
    }
};

标签:right,450,树中,else,del,key,root,LeetCode,left
From: https://www.cnblogs.com/tangxibomb/p/17455726.html

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:颠倒二进制位
    1.简述:颠倒给定的32位无符号整数的二进制位。提示:请注意,在某些语言(如Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在Java中,编译器使用二进制补码......
  • LeetCode 501. 二叉搜索树中的众数
    classSolution{public:vector<int>res;intcnt=0;intfind(TreeNode*root,intval)//返回当前子树值为val的个数{if(!root)return0;returnfind(root->left,val)+find(root->right,val)+(val==root->val);}map&......
  • LeetCode.螺旋矩阵问题
    LeetCode54螺旋矩阵思路就是说,给我们一个二维数组,然后我们需要按顺时针的顺序遍历二维数组,然后把每一个遍历到的数据放到一个一维数组中,最后返回这个一维数组。思路很简单,关键是怎么控制让他顺时针去访问,什么时候向下走什么时候向左走,什么时候向右走等问题如图分析:但是......
  • leetcode2352哈希表的键可以是一个容器等类型
    map<vector<int>,int>cnt;//用于存储每个行向量出现的次数for(autorow:grid){//直接遍历行向量cnt[row]++;}for(inti=0;i<n;++i){vector<int>arr;for(intj=0;j<n;++j){//存储列向量arr.emplace_back(grid[j][i]);}if(cnt.find(arr)!=cnt.......
  • leetcode2352二维vector的操作
    对于二维vector有分外层和内层:当初始化指定了外层大小(行数)时,添加元素写法:错误写法:不能使用[]vector<vector<int>>v(3);//指定外层数目for(inti=0;i<3;++i){for(intj=0;j<n;++j){v[i][j]=0;}}正确写法:vector<vector<int>>v(3);//指定外层数目......
  • Leetcode 2559. 统计范围内的元音字符串数
    题目:给你一个下标从0开始的字符串数组words以及一个二维整数数组queries。每个查询queries[i]=[l,r]会要求我们统计在words中下标在l到r范围内(包含这两个值)并且以元音开头和结尾的字符串的数目。返回一个整数数组,其中数组的第i个元素对应第i个查询的答案......
  • LeetCode 236_ 二叉树的最近公共祖先
    classSolution{public:vector<TreeNode*>path1,path2;booldfs(TreeNode*root,TreeNode*p,vector<TreeNode*>&path){if(!root)returnfalse;if(root==p||dfs(root->left,p,path)||dfs(root->right,p,path))......
  • LeetCode235. 二叉搜索树的最近公共祖先
    classSolution{public:TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){if(p->val<root->val&&q->val<root->val)returnlowestCommonAncestor(root->left,p,q);if(p->v......
  • leetcode 1341 电影评分
    leetcode1341 电影评分(selectu1.nameasresultsfromUsersu1leftjoin(selectmr1.user_id,count(mr1.rating)asc1fromMovieRatingasmr1groupbymr1.user_idhavingc1=(selectmax(p.c2)fromUsersasu2......
  • leetcode 65. 有效数字 66. 寻找两个正序数组的中位数
    leetcode65.有效数字66.寻找两个正序数组的中位数65.有效数字难度困难295有效数字(按顺序)可以分成以下几个部分:一个小数或者整数(可选)一个'e'或'E',后面跟着一个整数小数(按顺序)可以分成以下几个部分:(可选)一个符号字符('+'或'-')下述格式之一:至少一位数字,后面跟着一个......