代码随想录-68-669. 修剪二叉搜索树

news2025/5/24 20:43:16

目录

  • 前言
    • 题目
    • 1.按照二叉搜索树特性遍历整棵二叉搜索树,
    • 2. 本题思路分析:
    • 3. 算法实现
    • 4. 算法坑点

前言

我在刷卡哥的“代码随想录”,自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
代码随想录此题链接

题目

在这里插入图片描述
在这里插入图片描述

1.按照二叉搜索树特性遍历整棵二叉搜索树,

在遍历过程中,替换掉其中不满足条件的二叉搜索树的节点。

2. 本题思路分析:

递归三部曲:

  1. 参数与返回值:
  • 参数:当前节点cur和需要保留的上下区间边界值:low,high。
  • 返回值:返回TreeNode类型对象
  1. 终止条件:当前节点为null,说明遍历结束,直接返回null即可。
  2. 单层循环逻辑:
  • 如果当前节点的值小于low,则说明该节点应该删除,但是有可能该节点的右孩子节点在区间内,所以应该把该节点的右孩子节点替代该节点。递归写法就应该是递归函数带上当前节点的右孩子为参数,返回结果直接赋值给当前节点(相当于替换了用右孩子替换了当前节点,并返回替换后的当前节点(现在其实已经是右孩子了))。
  • 如果当前节点的值大于high,则说明该节点应该删除,但是有可能该节点的左孩子节点在区间内,所以应该把该节点的左孩子节点替代该节点。递归写法就应该是递归函数带上当前节点的左孩子为参数,返回结果直接赋值给当前节点(相当于替换了用左孩子替换了当前节点,并返回替换后的当前节点(现在其实已经是左孩子了))。
  • 正常递归(遍历整个二叉搜索树的步骤),将递归函数带上当前节点的左孩子节点,并将返回值赋值给当前节点的左孩子;将递归函数带上当前节点的右孩子节点,并将返回值赋值给当前节点的右孩子;
  • 最后返回这个当前节点。

3. 算法实现

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null){
            return null;
        }
        if(root.val < low){
            root = trimBST(root.right,low,high);
            return root;
        }else if(root.val > high){
            root = trimBST(root.left,low,high);
            return root;
        }
        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        return root;
    }
}

以下为优化写法

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null){
            return null;
        }
        if(root.val < low){
            return trimBST(root.right,low,high);
        }else if(root.val > high){
            return trimBST(root.left,low,high);
        }
        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        return root;
    }
}

4. 算法坑点

  1. 本题,最主要的是理解,修建二叉搜索树是在遇到不满足节点时,将它可能满足条件的某一边的孩子节点与它替换。
if(root.val < low){
 root = trimBST(root.right,low,high);
    return root;
}else if(root.val > high){
    root = trimBST(root.left,low,high);
    return root;
}
  1. 并且记得要有常规遍历整个二叉搜索树的过程。
root.left = trimBST(root.left,low,high);
root.right = trimBST(root.right,low,high);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb开发 —— JavaScript(JS)

目录 一、什么是JavaScript &#xff1f; 二、引入方式 三、基础语法 1. 书写语法 2. 输出语句 3. 变量 4. 数据类型 5. 运算符 6. 类型转换 四、函数 五、对象 1. Array数组 2. String 字符串 3. JSON 4. BOM 5. DOM 六、时间监听 一、什么是JavaSc…

MAE论文笔记+Pytroch实现

Masked Autoencoders Are Scalable Vision Learners&#xff0c; 2021 近期在梳理Transformer在CV领域的相关论文&#xff0c;落脚点在于如何去使用Pytroch实现如ViT和MAE等。通过阅读源码&#xff0c;发现不少论文的源码都直接调用timm来实现ViT。故在此需要简单介绍一下timm…

Vulnhub_Pylington

目录 一、信息收集 &#xff08;一&#xff09;端口服务探测 &#xff08;二&#xff09;目录扫描 二、漏洞挖掘 &#xff08;一&#xff09;robots敏感信息泄露 &#xff08;二&#xff09;python IDE沙箱绕过RCE 1. python敏感函数沙盒绕过 2. exec(__import_…

2.3 连续性随机变量

思维导图&#xff1a; 学习目标&#xff1a; 我会按照以下步骤学习连续型随机变量&#xff1a; 复习概率论的基础知识&#xff0c;包括概率、期望、方差等概念和公式&#xff0c;以及离散型随机变量的概率分布函数和概率质量函数的概念和性质。 学习连续型随机变量的概念和性…

在线文章生成-自动文章生成

文章生成软件 文章生成软件是一种能够自动生成文章的创作工具&#xff0c;可以大幅提高创作效率并节省创作成本。使用文章生成软件可以有效缩短文章的创作时间&#xff0c;尤其是在大批量的文章生产和时间紧迫的情况下&#xff0c;有着重要的作用。以下是文章生成软件可以为我…

初识C++之位图与布隆过滤器

一、位图 1.位图的概念 在了解位图前&#xff0c;先来看这么一道题&#xff1a; 假设给你40亿个没有排序的不重复的无符号整数。再给你一个无符号整数&#xff0c;让你判断这个整数是否在这40亿个数之中。 对于这道题&#xff0c;一般情况下的解法有很多&#xff0c;例如二…

如何利用空号检测 API 降低企业的业务成本

引言 电话营销和短信营销是现代营销活动的重要手段&#xff0c;但是无效号码的存在导致了很多资源浪费。利用空号检测 API 就可以避免企业向无效号码发送营销信息&#xff0c;降低营销成本。 本文将介绍空号检测 API 的工作原理以及如何利用空号检测 API 降低业务成本的多种方…

十分钟教你部署一个属于自己的chatgpt网站

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

( “树” 之 DFS) 543. 二叉树的直径 ——【Leetcode每日一题】

543. 二叉树的直径 给定一棵二叉树&#xff0c;你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意 &#xff1a;两结点之间…

屏幕色彩(一)-已知混色光色点求配色比

文章目录计算公式html源码运行结果计算公式 [WxWyWz][M][RGB]\begin{gather} \begin{bmatrix} W_x\\ W_y\\W_z \end{bmatrix} \begin{bmatrix} M \end{bmatrix} \begin{bmatrix} R\\G\\B \end{bmatrix} \end{gather} ​Wx​Wy​Wz​​​[M​]​RGB​​​​ 其中&#xff0c;Wxw…

STM-32:串口收发数据包—串口收发HEX数据包/串口收发文本数据包

目录一、发送HEX数据包1.1固定包长&#xff0c;含包头包尾&#xff08;包尾不是必须的&#xff09;1.2可变包长&#xff0c;含包头包尾二、接收HEX数据包三、发送文本数据包3.1固定包长&#xff0c;含包头包尾3.2可变包长&#xff0c;含包头包尾四、接收文本数据包五、HEX数据包…

73-Linux_线程安全

线程安全一.什么是线程安全二.strtok和strtok_r1.strtok2.strtok_r三.多线程中执行fork1.多线程中某个线程调用 fork()&#xff0c;子进程会有和父进程相同数量的线程吗&#xff1f;2.父进程被加锁的互斥锁 fork 后在子进程中是否已经加锁 ?一.什么是线程安全 线程安全即就是…

【数据结构】时间复杂度详解

首先我们要知道学习数据结构时都会讨论到算法&#xff0c;数据结构中的问题多数都有算法解决&#xff0c;两者是你中有我&#xff0c;我中有你的关系&#xff0c;所以在数据结构中的学习中算法也是必不可少的。 为方便阅读&#xff0c;以下为本片目录 目录 1.算法效率 1.1 …

JavaScript的学习理解

文章目录一、JavaScript 对象二、JavaScript 函数三、JavaScript 作用域总结一、JavaScript 对象 JavaScript 对象是拥有属性和方法的数据。 真实生活中的对象&#xff0c;属性和方法 在 JavaScript中&#xff0c;几乎所有的事物都是对象。 在 JavaScript 中&#xff0c;对象…

Spring5学习笔记01

一、课程介绍 Spring是什么呢&#xff1f; 它是一个轻量级的、开源的JavaEE框架&#xff0c;它的出现是为了解决企业繁琐的开发包括复杂代码&#xff0c;它可以用很优雅、很简洁的方式进行实现&#xff0c;也就是说它为了简化企业开发而生&#xff0c;而它在目前的企业中应用…

大规模MySQL运维陷阱之基于MyCat的伪分布式架构

引子 分布式数据库&#xff0c;已经进入了全面快速发展阶段&#xff0c;这种发展&#xff0c;是与时俱进的&#xff0c;与人的需求是分不开的&#xff0c;因为现在信息时代的高速发展&#xff0c;导致数据量和交易量越来越大。这种现象首先导致的就是存储瓶颈&#xff0c;因为…

(排序10)归并排序的外排序应用(文件排序)

TIPS 在一些文件操作函数当中&#xff0c;fputc与fgetc这两个函数都是针对字符的&#xff0c;如果说你需要往文件里面去放入整形啊等等&#xff0c;不是字符的类型&#xff0c;这时候就用fprintf&#xff0c;fscanf在参数里面数据类型控制一下就可以。但是话说回来&#xff0c…

自动化测试怎么学?这绝对是全网最系统的教程

目录 1、什么是自动化测试 2、自动化测试的发展前景怎么样 3、自动化测试难不难&#xff1f; 4、目前市场上自动化测试岗位的薪资是多少&#xff1f; 5、自动化测试学习方法好渠道 6、自动化测试怎么学&#xff1f; 学习基础知识 选择自动化测试框架 开始编写测试脚本 …

用HTTP proxy module配置一个反向代理服务器

反向代理与正向代理 摘抄&#xff1a;https://cloud.tencent.com/developer/article/1418457 正向代理 正向代理&#xff08;forward proxy&#xff09;&#xff1a;是一个位于客户端和目标服务器之间的服务器(代理服务器)&#xff0c;为了从目标服务器取得内容&#xff0c;…

“数实融合 元力觉醒”,苏州市元宇宙生态大会圆满召开!

为贯彻落实《苏州市培育元宇宙产业创新发展指导意见》&#xff0c;抢抓数字经济发展新机遇&#xff0c;加速培育与元宇宙发展相关的技术底座&#xff0c;“数实融合 元力觉醒——苏州市软件行业协会元宇宙专委会成立大会暨元宇宙生态大会”于4月14日成功举办。 苏州和数智能软件…