首页 > 其他分享 >LeetCode 669. 修剪二叉搜索树

LeetCode 669. 修剪二叉搜索树

时间:2023-06-05 11:58:24浏览次数:46  
标签:子树 return 669 二叉 该点 trimBST 节点 root LeetCode

思路

  • 遍历所有节点,如果当前节点不在所给区间里,删除该点;否则
  • 如果该点要被删除,将其左右子树其中之一提上来即可
    • 根节点位于左右子树取值区间的中间,如果该点要被删除,那么一定存在不满足要求的子树,不可能两棵子树同时保留

代码

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int l, int r) {
        if(!root)   return NULL;
        if(root->val<l)//根节点小于区间左端点,删除一定不满足要求的左子树
            return trimBST(root->right,l,r);
        if(root->val>r)//根节点大于区间右端点,删除一定不满足要求的右子树
            return trimBST(root->left,l,r);
        //如果当前根节点满足要求,修剪其左右子树
        root->left=trimBST(root->left,l,r);
        root->right=trimBST(root->right,l,r);
        return root;
    }
};

标签:子树,return,669,二叉,该点,trimBST,节点,root,LeetCode
From: https://www.cnblogs.com/tangxibomb/p/17457407.html

相关文章

  • Leetcode 2517. 礼盒的最大甜蜜度
    题目:给你一个正整数数组price,其中price[i]表示第i类糖果的价格,另给你一个正整数k。商店组合k类不同糖果打包成礼盒出售。礼盒的甜蜜度是礼盒中任意两种糖果价格绝对差的最小值。返回礼盒的最大甜蜜度。难度:中等示例1:输入:price=[13,5,1,8,21,2],k=3......
  • Leetcode 1156. 单字符重复子串的最大长度
    题目:如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。给你一个字符串 text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。难度:中等示例1:输入:text="ababa"输出:3示例2:输入:text="aaabaaa"输出......
  • LeetCode 450. 删除二叉搜索树中的节点
    classSolution{public:TreeNode*deleteNode(TreeNode*root,intkey){del(root,key);returnroot;}voiddel(TreeNode*&root,intkey){if(!root)return;if(key<root->val)del(root->left......
  • 根据层序遍历结果来构建完全二叉树
    做实习笔试时遇到的一个题里用到了根据层序遍历的结果来构建二叉树。全部代码如下importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args)throw......
  • #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&......
  • 链式二叉树的实现(c语言)
    本篇博客主要写了如何完成二叉树的前,中,后序遍历,查找特定值的节点,计算最大深度等。都是对二叉树的一些基本操作。二叉树基本操作头文件typedefcharBTDataType;typedefstructBinaryTreeNode{ BTDataTypedata; structBinaryTreeNode*left; structBinaryTreeNode*right;......
  • 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);//指定外层数目......