news 2026/4/18 3:30:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LC.783 | 二叉搜索树节点最小距离 | 树 | 中序遍历有序性

输入:二叉搜索树的根节点root

要求:计算树中任意两个不同节点值之间的最小差值。

输出:一个整数,表示最小差值。


思路:

这道题如果是一棵普通的二叉树,我们需要把所有节点值存下来,两两比较,复杂度是 O(N^2)。但因为它是二叉搜索树 (BST),我们可以利用其特性将问题极大简化。

  1. 核心转化:BST -> 有序数组
    • 二叉搜索树的中序遍历结果是一个单调递增的有序数组
    • 在一个有序数组中,最小的差值一定出现在相邻的两个数之间
    • 例如:[1, 4, 7, 9]。差值只可能产生在4-1,7-4,9-7之间,绝对不可能产生在9-1之间。
  2. 优化空间:双指针思维
    • 我们不需要真的开辟一个数组把所有数存下来(那样空间复杂度是 O(N))。
    • 我们在遍历过程中,只需要知道“上一个遍历到的节点值” (lastprev)是多少。
    • 当前节点值root->val减去上一个节点值last,就是当前的相邻差值。我们不断更新这个差值的最小值即可。
  3. 处理细节:
    • 我们需要一个变量last来记录上一个节点的值。初始化为-1(或者一个不可能的负数),表示这是第一个节点,还没上家,不计算差值。

复杂度:

  • 时间复杂度:O(N)
    • 需要中序遍历整棵树。
  • 空间复杂度:O(H)
    • H 为树的高度,主要是递归栈的空间。

class Solution { public: void inorder(TreeNode* root, int& ans, int& last) { if (!root) { return; } // 1. 递归左子树 inorder(root->left, ans, last); // 2. 处理当前节点(中序位置) if (last == -1) { // 如果是第一个节点,只需更新 last,没法计算差值 last = root->val; } else { // 计算当前节点与上一个节点的差值,并更新最小值 // 因为是中序遍历,root->val 一定大于 last,所以不用 abs 也行 ans = min(abs(root->val - last), ans); // 更新 last 为当前节点,供下一次使用 last = root->val; } // 3. 递归右子树 inorder(root->right, ans, last); } int minDiffInBST(TreeNode* root) { int ans = INT_MAX; int last = -1; // 用于记录中序遍历中的“上一个”节点值 inorder(root, ans, last); return ans; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 0:26:29

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

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

作者头像 李华
网站建设 2026/4/18 3:26:40

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

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

作者头像 李华
网站建设 2026/4/13 12:10:41

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

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

作者头像 李华
网站建设 2026/4/15 8:16:00

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

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

作者头像 李华
网站建设 2026/4/17 13:59:00

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

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

作者头像 李华
网站建设 2026/4/16 14:58:32

为什么你的Agent服务状态异常频发?根源竟在Docker数据卷挂载策略上

第一章:为什么你的Agent服务状态异常频发?根源竟在Docker数据卷挂载策略上在构建基于容器的Agent服务时,频繁出现的状态异常往往被归因于网络超时或资源不足。然而,深层排查发现,问题根源常隐藏在Docker数据卷的挂载策…

作者头像 李华