首页 > 其他分享 >刷刷刷 Day 23 | 669. 修剪二叉搜索树

刷刷刷 Day 23 | 669. 修剪二叉搜索树

时间:2023-01-26 21:33:47浏览次数:50  
标签:修剪 669 23 Day high low 二叉 root 节点

669. 修剪二叉搜索树

LeetCode题目要求

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

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

图

示例

输入:root = [1,0,2], low = 1, high = 2
输出:[1,null,2]
解题思路

根据范围修剪树,且是二叉搜索树,那么在修剪后需要保持二叉搜索树。
所以按照范围约束,

  1. 如果节点值 < low , 那么它的左子树就都不要考虑了,需要遍历它的右子树,可能是在范围内;
  2. 如果节点值 > high, 那么右子树不需要扣了,而要处理左子树,这里大家不要认为 low 或 high 一定是 节点范围内的值;
  3. 如果再 low 到 high 范围内,那么就直接取节点好了

上代码

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        // 确定终止条件
        if (root == null) {
            return null;
        }

        int val = root.val;
        // 如果 节点值 小于 low,左节点肯定小于 当前节点值,不需要考虑;只看 右节点,如果在范围内就 按二叉搜索树构造
        if (val < low) {
            return trimBST(root.right, low, high);
        }

        // 如果 节点值 大于 high,需要遍历左节点,因为左节点可能是在范围内的
        if (val > high) {
            return trimBST(root.left, low, high);
        }

        // 在 low -> high 范围内的直接取节点
        root.left = trimBST(root.left, low, high);
        root.right = trimBST(root.right, low, high);

        return root;

    }
}
重难点

二叉树的特性,范围内修剪,主要的不单单考虑节点是在范围内就可以,还要主要它们的左右子树

附:学习资料链接

标签:修剪,669,23,Day,high,low,二叉,root,节点
From: https://www.cnblogs.com/blacksonny/p/17068253.html

相关文章

  • 电工笔记 day1
          blog:师万物 本文是学习内容的简单回顾,希望对大家能有所帮助。 10A插座、16A插座380V/220V低压供配电电路的维修LC串联、并联电路PLC、变频器R......
  • 电工笔记 day2
          blog:师万物 本文是学习内容的简单回顾,希望对大家能有所帮助。 NPN型、PNP型三极管PN结倍率扁平封装变压器波形测试线、探头、接地夹插针网......
  • 算法--2023.1.26
    1.力扣338--比特位计数classSolution{publicint[]countBits(intn){//关键在于找到递推公式int[]res=newint[n+1];for(inti......
  • [20230125]21c Force matching signature的计算.txt
    [20230125]21cForcematchingsignature的计算.txt--//昨天看了链接:https://hourim.wordpress.com/2023/01/22/force-matching-signature/--//里面提到计算force_matchin......
  • 【AAAI2023】Head-Free Lightweight Semantic Segmentation with Linear Transformer
    论文:【AAAI2023】Head-FreeLightweightSemanticSegmentationwithLinearTransformer代码:https://github.com/dongbo811/AFFormer这是来自阿里巴巴的工作,作者构建了......
  • 230126_50_SpringBoot入门
    4.首页实现自定义配置packagecom.bill.config;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.an......
  • 代码随想录算法训练营第十二天 239. 滑动窗口最大值 | 347.前 K 个高频元素
    队列应用lc239滑动窗口最大值本题可以使用队列来记录窗口,但是想要记录最大值,则需要使用单调队列,而且我们只需要维护大值。在添加元素时,先将比要添加元素小且在尾部的元......
  • 代码随想录算法训练营day12 | leetcode 239. 滑动窗口最大值 347.前 K 个高频元素
    基础知识ArrayDequedeque=newArrayDeque();/*offerFirst(Ee)在数组前面添加元素,并返回是否添加成功offerLast(Ee)在数组后天添加元素,并返回是否添加成功po......
  • 过年必备!亲戚计算器「GitHub 热点速览 v.23.02」
    过完这周大家就要开始为期7天的春节长假了,当然有些HG小伙伴拥有了10+天的长假就低调点不要告诉他人,以免招人妒忌。春节必经的事情可能就是走亲戚了,所以本周特推选取了......
  • Linux学习-DAY4
    一、系统状态检测命令1.ifconfig命令ifconfig命令用于获取网卡配置与网络状态等信息,英文全称为“interfaceconfig”,语法格式为“ifconfig[参数][网络设备]”。2.​uname......