当前位置: 首页 > news >正文

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; } };
http://www.cnnetsun.cn/news/90315.html

相关文章:

  • DAY29 pipeline管道
  • A29语音模组:100dB消回音黑科技,超大音量下也能清晰通话
  • 1688 拍立淘接口(item_search_img)技术全景解析
  • Dify如何逆向解析加密PDF?,深入剖析现代文档安全的攻防博弈
  • 测试工程师必备:利用Apipost AI编写脚本,快速实现多接口串联流程
  • IP 扫盲:不要再迷信家宽
  • 基于协同过滤算法的动漫推荐系统源码 Java+SpringBoot+Vue3
  • 高效量子电路设计秘籍(R驱动的3种前沿优化策略)
  • 分分钟带你杀入Kaggle Top 1%,大牛带队,100%拿牌!
  • IP6808至为芯支持PD快充输入的15W无线充电方案SOC芯片
  • 笔记本重装系统超详细指南(附系统备份还原技巧,告别电脑店花费)
  • 大型地源热泵机组多高
  • 别墅供暖地源热泵
  • Traefik:为云原生而生的自动化反向代理
  • P1043 [NOIP 2003 普及组] 数字游戏
  • Web安全攻防学习图谱:90天从网安小白到漏洞猎人(超详细),看这一篇就够了!
  • 【Docker镜像优化黄金法则】:让边缘Agent更小更快更安全
  • 前端vue3 web端中实现拖拽功能实现列表排序
  • 【音视频开发必看】Dify 1.7.0音频转换避坑指南:5大常见错误及修复方案
  • VSCode+PlatfoemIO+ESP32-Cam + MB烧录器 入门测试
  • 【加密PDF解析避坑指南】:Dify错误处理的5大核心策略与实战技巧
  • 性能测试入门:使用 Playwright 测量关键 Web 性能指标
  • 从入门到精通:R语言极值分布拟合在气象数据中的4个关键步骤
  • 仅1%人掌握的建模技术:R语言金融相关性矩阵稀疏化处理实战
  • 超越传统PLM理念,定义行业新标准:全星研发项目管理APQP软件系统
  • 【安全专家亲授】私有化Dify的SSL配置秘诀:保障数据传输不被窃取
  • Vue3+JS 高级前端面试题
  • 海康威视智能工厂,是如何走向“领航”的?
  • 《深入昇腾底层:Ascend C 编程模型与高性能算子开发实战》
  • 实战 Ascend C:从零实现高性能自定义算子