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

leetcode日记(86)恢复二叉搜索树

有点难,没想到中序遍历,于是花了很长时间。

想到中序遍历后也不简单,需要注意的是要保存上一个节点的指针,因为当前一个数大于后一个数时,可能是前一个数出问题也可能是后一个数出问题。

最后想到了:如果出错的是两个不相邻的数,那么第一个错肯定是前一个数的错,第二个错肯定是后一个数的错;如果遍历完整棵树都只找到一个出错地方,那么就是这个地方前一个数和后一个树出问题。

最后将出问题的数字交换就行了。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* mark1;
    TreeNode* mark2;
    TreeNode* mark;
    void recursion(TreeNode* root){
        if(root->left) recursion(root->left);
        if(mark1==NULL&&root->val<mark->val){
            mark1=mark;
            mark2=root;
        }
        if(mark1!=NULL&&root->val<mark->val){
            mark2=root;
        }
        mark=root;
        if(root->right) recursion(root->right);
    }
    void recoverTree(TreeNode* root) {
        mark=new TreeNode(-2147483648);
        recursion(root);
        int x=mark1->val;
        mark1->val=mark2->val;
        mark2->val=x;
    }
};

相关文章:

  • 2008-2024年中国手机基站数据/中国移动通信基站数据
  • VSTO(C#)Excel开发2:Excel对象模型和基本操作
  • 2025年渗透测试面试题总结-字某跳动-安全研究实习生(三面)(题目+回答)
  • 40岁开始学Java:控制反转IoC
  • 前端知识点---路由模式-实例模式和单例模式(ts)
  • 【redis】全局命令set、get、keys
  • 【linux网络编程】浏览网页时客户端与服务器之间数据交互的完整过程
  • 根据输入汉字生成带拼音的米字格字帖
  • 对接RAGflow的API接口报错
  • Java本地缓存简单实现,支持SpEL表达式及主动、过期、定时删除
  • 解锁日常养生密码,拥抱健康生活
  • RabbitMQ学习笔记
  • 腾讯云大模型知识引擎LKE+DeepSeek结合工作流升级智能客服
  • Python模块的版本管理与文档编写
  • 初学者对爬虫的实例(抖音/b站)python篇
  • 实现一键不同环境迁移ES模板
  • 在IDEA中进行git回滚操作:Reset current branch to here‌或Reset HEAD
  • pyqt联合designer的运用和设置
  • 2025年全球生成式AI消费应用发展趋势报告
  • Lucas定理介绍及证明
  • 网站开发文档总结/web网址
  • 网站建设需要哪些工作室/重庆百度推广
  • 做查询网站 发布数据/下载app
  • 网站建设需要实现哪些目标/东莞谷歌推广公司
  • 四川电脑网站建设/seo搜索优化是什么
  • 做查询网站费用/百度指数平台