首页 > 其他分享 >31_修剪二叉搜索树

31_修剪二叉搜索树

时间:2024-01-20 13:46:31浏览次数:36  
标签:修剪 right 31 二叉 high low null root left

669.修剪二叉搜索树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

示例 1:

img

输入:root = [1,0,2], low = 1, high = 2
输出:[1,null,2]

示例 2:

img

输入:root = [3,0,4,null,2,null,null,1], low = 1, high = 3
输出:[3,2,null,1]

递归法

class Solution {
    TreeNode left, right;
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if (root == null)  return null;
        if (root.val < low) {
            left = trimBST(root.right, low, high);// 寻找符合区间[low, high]的节点
            return left;
        }
        if (root.val > high) {
            right = trimBST(root.left, low, high);// 寻找符合区间[low, high]的节点
            return right;
        }
        root.left = trimBST(root.left, low, high); // root->left接入符合条件的左孩子
        root.right = trimBST(root.right, low, high);// root->right接入符合条件的右孩子
        return root;
    }
}

标签:修剪,right,31,二叉,high,low,null,root,left
From: https://www.cnblogs.com/codingbao/p/17976376

相关文章

  • 30_删除二叉搜索树中的节点
    450.删除二叉搜索树中的节点给定一个二叉搜索树的根节点root和一个值key,删除二叉搜索树中的key对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。示例1:......
  • P7312题解
    P7312[COCI2018-2019#2]Sunčanje题目传送门题解分类讨论的思想有点像P4169?要你对于每一个矩形,求是否存在编号比它大,与它有交的矩形。直接做需要用一个比较神仙的线段树用法,所以我们可以容斥:我们求出编号比它大,与它无交的矩形数量,最后与所有可能覆盖它的矩形共\(n-i\)个......
  • dotnet 8项目Docker部署报错 Unhandled exception. Microsoft.Data.SqlClient.SqlExce
    环境:dotnet8+sqlserver2012本地开发调试正常,部署至Docker容器时,运行实例报错。查看日志显示:Unhandledexception.Microsoft.Data.SqlClient.SqlException(0x80131904):Aconnectionwassuccessfullyestablishedwiththeserver,butthenanerroroccurredduringth......
  • CCF模拟_202312-1_仓库规划
    计算机软件能力认证考试系统样例输入4200-1-1120-1样例输出3103提交:#include<iostream>usingnamespacestd;intmain(){ intn,m;//仓库数量,维度 int**a;//二维数组,存放仓库位置信息 inti,j,font,itmp,key;//这仨是存放后边的临时变量 cin>>n>......
  • 第31节: Vue3 内联处理程序
    在UniApp中使用Vue3框架时,你可以使用内联处理程序来直接在模板中编写JavaScript代码。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用内联处理程序:<template><view><button@click="handleClick">Clickme</button><p>{{message}}</p></view>......
  • 二叉树 - 二叉树入门题
    二叉树入门题1.判断两颗树是否相同classSolution{publicbooleanisSameTree(TreeNodep,TreeNodeq){//如何判断两颗树是否相同?根相同+左右子树相同//如何判断根相同?结构+值相同if(p==null&&q!=null||p!=null&&......
  • 代码随想录 day23 修剪二叉搜索树 将有序数组转换为二叉搜索树 把二叉搜索树转换为累
    修剪二叉搜索树这道题不能直接写删除代码因为要涉及父子关系的保留如这样是暴力删掉不符合区间的节点但是没有保留父子关系这里我们把不符合区间的节点通过一个临时节点传递出来然后在外面合适方向接住具体怎么接住的呢其实就是对于root来说左边子树抛出的节点就会......
  • 31.定语从句-定语从句的练习-2
    穿自己的鞋不仅方便,而且还确保一点不用管别人的感受。先找主谓宾——不仅。。。而且(notnoly...butalso)连接的2个句子 不用管别人的感受是来解释一点的同位语Wearingmyownshoesis(proves)notonlyconvenientbutalsoensuresapointthatthefellingsofothersc......
  • 29_二叉搜索树中的插入操作
    701.二叉搜索树中的插入操作给定二叉搜索树(BST)的根节点root和要插入树中的值value,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。......
  • 分割回文串 131
    这也是用回溯解决,回溯就是多层for循环,但是这一题有点难发现多层for循环体现在哪里。实际上该问题for循环的层数与字符串的间隔有关for循环的层数代表,分割线的个数;for循环的遍历代表这分割线的位置。这里引用卡哥的图:因为分割线不能取前一个的位置,所以要根据之前组合那题的套......