news 2026/6/15 9:34:07

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/6/13 11:53:50

为什么顶尖环境研究机构都选择R语言做数据同化?真相终于曝光

第一章:环境监测的 R 语言数据同化在环境科学领域,数据同化是融合观测数据与数值模型输出的关键技术,旨在提升预测精度并减少不确定性。R 语言凭借其强大的统计分析能力和丰富的扩展包,成为实现环境数据同化的理想工具。通过整合遥…

作者头像 李华
网站建设 2026/6/12 21:55:51

从空间数据到细胞演化树:R语言Monocle3与Seurat整合应用全解析

第一章:空间转录组的 R 语言细胞轨迹分析在高通量测序技术快速发展的背景下,空间转录组学为研究组织中基因表达的空间异质性提供了强大工具。结合单细胞RNA测序数据,利用R语言进行细胞轨迹推断(pseudotime analysis)可…

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

智能Agent日志收集难?资深架构师教你7步构建稳定日志体系

第一章:智能Agent日志体系的挑战与演进随着分布式系统和智能Agent架构的广泛应用,传统的日志记录方式已难以满足复杂场景下的可观测性需求。现代Agent系统通常具备自主决策、多任务并发和动态环境适应能力,这使得其日志数据呈现出高吞吐、异构…

作者头像 李华
网站建设 2026/6/11 19:14:12

三勾软件|次卡商品核添加使用流程

添加次卡商品基础信息填写与普通商品一致,区别为可以填写有效期且只能为单规格商品核销次数:购买该商品可核销的次数 核销有效期: 永久:不会过期,直到次数使用完为止 购买后生效:购买后可以核销的时间&…

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

DAY28 复习日

kaggle泰坦尼克号

作者头像 李华
网站建设 2026/6/13 14:56:56

Docker Offload云端资源对接陷阱预警:90%工程师忽略的2个致命配置

第一章:Docker Offload云端资源对接的现状与挑战随着边缘计算与云原生技术的深度融合,Docker Offload 作为一种将容器化工作负载动态迁移至云端执行的机制,正逐渐成为提升边缘设备算力利用效率的关键手段。然而,在实际落地过程中&…

作者头像 李华