news 2026/6/10 12:32:34

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/5 5:35:45

LC.783 | 二叉搜索树节点最小距离 | 树 | 中序遍历有序性

输入&#xff1a; 二叉搜索树的根节点 root。 要求&#xff1a; 计算树中任意两个不同节点值之间的最小差值。 输出&#xff1a; 一个整数&#xff0c;表示最小差值。思路&#xff1a; 这道题如果是一棵普通的二叉树&#xff0c;我们需要把所有节点值存下来&#xff0c;两两比较…

作者头像 李华
网站建设 2026/6/7 11:33:11

Dify工作流并发控制实战指南(并行执行优化全攻略)

第一章&#xff1a;Dify工作流并发控制的核心概念在构建基于 Dify 的自动化工作流时&#xff0c;合理管理并发执行是确保系统稳定性与数据一致性的关键。当多个用户或任务同时触发相同的工作流节点时&#xff0c;若缺乏有效的并发控制机制&#xff0c;可能导致资源竞争、状态错…

作者头像 李华
网站建设 2026/6/10 3:43:11

为什么你的Agent版本总失控?Dify环境下5大陷阱深度剖析

第一章&#xff1a;Agent版本失控的根源解析在分布式系统与自动化运维场景中&#xff0c;Agent作为核心组件承担着数据采集、指令执行和状态上报等关键职责。然而&#xff0c;随着部署规模扩大和迭代频率提升&#xff0c;Agent版本失控问题日益突出&#xff0c;直接影响系统的稳…

作者头像 李华
网站建设 2026/6/9 18:30:49

A29语音模组:100dB消回音黑科技,大音量设备的“降噪救星”

门禁对讲音量拉满就回音&#xff1f;车间广播被机器声盖死&#xff1f;远场呼叫喊破喉咙也听不清&#xff1f;这些音频痛点&#xff0c;A29数字语音处理模组全解决&#xff01;专注声学10年团队研发&#xff0c;100dB超强消回音45dB深度降噪&#xff0c;5米远场拾音稳如“贴耳对…

作者头像 李华
网站建设 2026/6/5 20:26:35

Docker使用案例-部署Python-flask应用

介绍 基于已经有docker基础概念的情况下&#xff0c;可以看我前面的文章Docker使用案例-数据卷启动nginx-CSDN博客 实验环境 操作系统-centsos9.0docker 27.3.1 实验步骤 创建项目目录 mkdir /mywebtouch app.pytouch dockerfile 编写python代码 from http.server impor…

作者头像 李华
网站建设 2026/6/5 17:13:39

AP-0316语音模组:100dB消回音+AI降噪,攻克全场景音频痛点

【开发者实测】门禁对讲回音刺耳&#xff1f;车间设备噪音盖过人声&#xff1f;远场呼叫信号失真&#xff1f;别让音频问题拖慢项目进度&#xff01;AP-0316全功能语音处理模组重磅来袭&#xff0c;集AI ENC降噪、100dB AEC消回音、多端口适配于一体&#xff0c;从硬件底层解决…

作者头像 李华