news 2026/6/27 17:55:12

LC.669 | 修剪二叉搜索树 | 树 | 递归与重连

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LC.669 | 修剪二叉搜索树 | 树 | 递归与重连

输入:
二叉搜索树的根节点root,以及最小边界low和最大边界high

要求:
修剪该二叉搜索树,使得所有节点的值都在[low, high]之间。
注意:可能需要改变树的根节点,修剪后的树必须保持二叉搜索树的相对结构(即:父子关系虽变,但原来的后代如果保留下来了,相对大小关系不变)。

输出:
修剪好的二叉搜索树的新的根节点TreeNode*


思路:

这是一道经典的递归题目,借着这题来回顾一下递归三要素。

1. 确定递归函数的定义:

  • 函数trim(root, low, high)的含义是:“给我一棵树的根节点root,我帮你把不符合[low, high]范围的节点剪掉,然后把修剪后合法的树的根节点返回给你。”
  • 这点非常重要:我们通过返回值来接收修剪后的结果,并用来更新父节点的指针。

2. 确定递归终止条件:

  • 如果root为空(nullptr),说明遍历到了空节点,没什么好修剪的,直接返回nullptr

3. 确定单层递归逻辑(核心剪枝逻辑):
利用二叉搜索树(BST)的有序性(左 < 根 < 右)进行判断:

  • 情况 A:当前节点太小了 (root->val < low)

    • 既然当前节点都比low小,那么根据 BST 性质,它的左子树里所有节点肯定都比low小。
    • 决策:当前节点和它的左子树都要被“抛弃”。
    • 希望:它的右子树里可能还有比当前节点大、且在[low, high]范围内的节点。
    • 操作:直接去修剪右子树,并把修剪后的结果作为新的根返回。即return trim(root->right, ...)
  • 情况 B:当前节点太大了 (root->val > high)

    • 同理,既然当前节点都比high大,那么它的右子树肯定全废了。
    • 决策:当前节点和它的右子树都要被“抛弃”。
    • 希望:它的左子树里可能还有比当前节点小、且符合要求的节点。
    • 操作:直接去修剪左子树,并把结果返回。即return trim(root->left, ...)
  • 情况 C:当前节点在范围内 (low <= root->val <= high)

    • 决策:当前节点是合法的,必须保留
    • 隐患:虽然当前节点合法,但它的左孩子可能太小,右孩子可能太大。
    • 操作
      1. 让左孩子去接受修剪:root->left = trim(root->left, ...)
      2. 让右孩子去接受修剪:root->right = trim(root->right, ...)
      3. 左右都修整好了,返回当前节点root

复杂度:

  • 时间复杂度:O(N)
    • 每个节点最多被访问一次。
  • 空间复杂度:O(H)
    • H 为树的高度,递归调用栈的深度。

classSolution{public:TreeNode*trimBST(TreeNode*root,intlow,inthigh){returntrim(root,low,high);}TreeNode*trim(TreeNode*root,intlow,inthigh){if(!root){returnnullptr;}if(root->val>=low&&root->val<=high){root->left=trim(root->left,low,high);root->right=trim(root->right,low,high);returnroot;}elseif(root->val<low){returntrim(root->right,low,high);}elseif(root->val>high){returntrim(root->left,low,high);}returnroot;}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 22:39:28

2025年央国企业财一体平台选型指南

在金税四期全面推行、数电发票广泛普及以及智能AI技术迅猛发展的当下&#xff0c;央国企正经历着业财管理模式的深刻变革。传统以纸质票据为主导的业财流程&#xff0c;不仅效率低下&#xff0c;而且风险隐患较大&#xff0c;同时数据孤岛现象极为突出。央国企迫切需要搭建“业…

作者头像 李华
网站建设 2026/6/27 3:05:30

讲真的,上班一定要学会立人设,太重要了!

“讲真的&#xff0c;上班一定要学会立人设&#xff0c;太重要了&#xff01;”这是很多打工人摸爬滚打后悟出来的实在道理。 不过&#xff0c;设立人设也不是大家装样子&#xff0c;而是要把自己优秀的一面展现出来&#xff0c;保持真诚、真实&#xff0c;这样才能在职场中走…

作者头像 李华
网站建设 2026/6/26 0:17:36

服务总在凌晨崩溃?,一文掌握Docker Compose健康检查精准配置

第一章&#xff1a;服务总在凌晨崩溃&#xff1f;——健康检查的必要性系统稳定运行是服务可靠性的基石&#xff0c;但许多运维团队都曾经历过“凌晨告警”的噩梦&#xff1a;用户访问突然失败&#xff0c;监控显示服务无响应&#xff0c;而日志却未记录明显异常。问题往往追溯…

作者头像 李华
网站建设 2026/6/26 22:06:59

揭秘Docker MCP网关服务注册机制:5步实现高可用服务发现

第一章&#xff1a;揭秘Docker MCP网关服务注册核心原理在现代微服务架构中&#xff0c;Docker容器化技术与MCP&#xff08;Microservice Control Plane&#xff09;网关的协同工作成为服务发现与流量调度的关键。MCP网关通过动态监听容器生命周期事件&#xff0c;实现服务实例…

作者头像 李华
网站建设 2026/6/27 11:48:41

学籍管理系统源码 Java+SpringBoot+Vue 万字文档+PPT

一、关键词 学籍管理系统&#xff0c;学籍信息管理系统&#xff0c;学生学籍管理平台二、作品包含 源码数据库万字设计文档PPT全套环境和工具资源本地部署教程三、项目技术 前端技术&#xff1a;Html、Css、Js、Vue2.0、Element-ui 后端技术&#xff1a;Java、SpringBoot2.0、…

作者头像 李华
网站建设 2026/6/27 4:13:11

锐捷gre over ipsec结合ospf配置案例

网络规划设计 1、先建用tunnel口建立GRE vpn隧道 2、再用ospf打通两边 3、对公网地址进行esp加密ipese vpn 4、最后保证两边1.1.1.1和3.3.3.3互通 R1配置 ip access-list extended 100 //配置感兴趣流为公网地址&#xff0c;因为tunnel里面用的源目地址为公网地址 10 permit g…

作者头像 李华