news 2026/4/29 2:20:19

LC.99 | 恢复二叉搜索树 | 树 | 中序遍历找“逆序对”(定位两节点再交换)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LC.99 | 恢复二叉搜索树 | 树 | 中序遍历找“逆序对”(定位两节点再交换)

输入:二叉搜索树根节点root,其中恰好有两个节点的值被错误交换

要求:在不改变树结构的情况下恢复 BST(只允许改节点值)。

输出:无(原地修改root)。


思路:

BST 的中序遍历应该是严格递增序列。
一旦有两个节点值被交换,中序序列里就会出现“乱序”,表现为逆序对

  • 正常:... a < b < c < d ...
  • 交换后可能出现:
    • 相邻交换:只出现1 次逆序(例如... a < c < b < d ...,在c > b处逆序)
    • 不相邻交换:出现2 次逆序(例如... a < d < c < b ...,会在d > cc > b两处逆序)

所以我们中序遍历时维护prev(上一个访问的节点):

  1. 若发现prev->val > node->val,说明出现逆序。
  2. 第一次逆序first = prev(大的那个)
  3. 每次逆序都更新second = node(小的那个)
    • 相邻交换:只会更新一次second
    • 不相邻交换:第二次逆序会把second更新成最终正确的小节点

遍历结束后交换firstsecond的值即可恢复。


复杂度:

  • 时间复杂度:O(N)
  • 空间复杂度:O(H)(递归栈,H 为树高)

classSolution{public:voidrecoverTree(TreeNode*root){first=nullptr;second=nullptr;prev=nullptr;inorder(root);if(first!=nullptr&&second!=nullptr){inttmp=first->val;first->val=second->val;second->val=tmp;}}private:TreeNode*first;TreeNode*second;TreeNode*prev;voidinorder(TreeNode*node){if(node==nullptr)return;inorder(node->left);if(prev!=nullptr&&prev->val>node->val){if(first==nullptr)first=prev;second=node;}prev=node;inorder(node->right);}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 16:12:56

c++进程池(Linux)的实现(2025.12.22)

学习比特课程后&#xff0c;学习总结和代码实现。这节课产生了两点困惑&#xff0c;查阅资料后&#xff0c;有一下理解&#xff1a;1.“FD 数值相同”≠“指向同一个管道”比如两次pipe()可能都生成pipefd[0]3&#xff08;因为前一轮父进程关闭了读端 3&#xff0c;FD 号被复用…

作者头像 李华
网站建设 2026/4/27 12:33:40

多通道小动物代谢监控系统 小动物代谢监测系统 小动物代谢检测系统

小动物代谢系统(AMMS)具有实时统计、自动化等优点&#xff0c;提高了药物研发和基础生命科学研究的效率&#xff0c;减少手工操作带来数据偏差及误差。, 在动物无拘束状态下&#xff0c;进行多通道测量Amms能实时统计大小鼠的饮食量、饮水量、运动量3个指标饮食槽设计防止粪…

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

AI论文助手推荐:8个高效工具实现自动降重与内容优化

在AI论文辅助工具领域&#xff0c;多款平台各具特色&#xff0c;涵盖降重、AIGC检测优化及论文撰写等核心功能。通过对8款主流工具的横向评测&#xff0c;结合实际测试结果与用户体验反馈&#xff0c;以下为综合性能排名&#xff08;评估维度包括处理效率、内容准确性及操作便捷…

作者头像 李华
网站建设 2026/4/25 4:15:35

动态规划(六)——分治优化DP 算法设计与分析 国科大

本文内容紧接动态规划&#xff08;五&#xff09;&#xff0c;讨论如何优化序列对齐算法Hirschberg算法上文最后提到的解决方案&#xff0c;是维护一个OPT矩阵&#xff0c;那么它的空间开销就变成了O(mn)&#xff0c;而Hirschberg 算法通过分治策略&#xff0c;将序列对齐问题的…

作者头像 李华
网站建设 2026/4/29 1:37:37

基于python的网上商城比价系统(源码+vue+前后端分离)

前言基于Python的网上商城比价系统是一种先进的应用程序&#xff0c;旨在帮助消费者在众多在线商城中快速找到性价比最高的商品。以下是对该系统的详细介绍&#xff1a; 一、系统背景与意义 随着电子商务的迅猛发展&#xff0c;网上商城已成为消费者购物的主要渠道。然而&#…

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

OpenMV识别物体结合WiFi传输的安防监控:项目实践

用OpenMV做智能安防&#xff1a;从目标识别到WiFi告警的实战全记录 最近在捣鼓一个“小而实用”的物联网项目&#xff1a;让一块小小的OpenMV摄像头&#xff0c;不仅能识别人和物体&#xff0c;还能在发现异常时立刻通过WiFi把图像发到手机上。听起来像高端货&#xff1f;其实…

作者头像 李华