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

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

相关文章:

  • 【国产 OS 顶流实战】KylinOS V10 等保 2.0 三级合规 + MES 系统国产化迁移全案
  • Java基于springboot+vue的毕业生离校管理系统的设计与实现
  • 【毕业设计】基于springboot的旧物回收商城系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • OpenMV中HOG特征提取全面讲解
  • 8个AI论文生成平台测评,降重与写作功能深度解析
  • 8个AI论文改写工具评测,降重与写作功能全面分析
  • Elasticsearch基本用法项目应用:分页与高亮处理
  • 基于proteus的4位数码管动态扫描实战案例
  • 全面讲解ESP32开发核心外设:GPIO控制基础教学
  • PaperzzAI PPT:别再熬夜做PPT了,让AI给你“一键生成高光时刻”——不是模板搬运工,是你的视觉导演+内容编剧
  • 图解说明Vitis使用教程:适合初学者的界面功能解析
  • 具身智能重构体验!CES Asia 2026:消费电子从“工具”变身“主动伙伴”
  • STM32-时钟树编程
  • Packet Tracer使用教程:OSPF基础配置图解说明
  • 批量部署USB转串口驱动的企业级Windows策略应用
  • 赋能成长型企业:SAP Business One与奥维奥的数字化共赢之道
  • 一文说清同步整流buck电路图及其工作原理
  • Packet Tracer下载步骤详解:适合初学者的系统学习
  • 2025年AI论文写作平台精选,集成LaTeX支持与智能格式检查
  • Hotkey Detective终极指南:3步解决Windows热键冲突难题
  • 【Mol Plant综述精读】植物中的染色质重塑:复合物组成、机制多样性及生物学功能
  • 基于GA-HIDMSPSO算法优化BP神经网络+NSGAII多目标优化算法工艺参数优化、工程设计优化(四目标优化案例)
  • 系统学习erase前必须知道的存储基础知识
  • 通俗解释定制ROM在2025机顶盒刷机中的作用机制
  • 【数据分析】基于逆向方法的新型神经网络的实现,以估计云杉音木薄板的材料特性附Matlab代码
  • 微信小程序二维码生成实战指南:3步实现个性化营销码
  • 终极指南:如何使用Keyboard Chatter Blocker解决机械键盘连击问题
  • Performance-Fish性能优化指南:让《环世界》告别卡顿的5大秘诀
  • GKD订阅管理难题:如何用简单方法解决复杂问题
  • Windows热键失灵怎么办?这款侦探工具帮你快速定位问题