Leetcode刷题笔记题解(C++):99. 恢复二叉搜索树

思路:

二叉搜索树的中序遍历是递增序列,可以在中序遍历中记录两个需要交换的节点,直到遍历完毕之后,对两个节点的值进行交换即可得到正确的二叉搜索树

比如中序序列为  1  2   3  7  5  6  4(7比5大记录7为x,6比4大记录4为y,交换x与y)

/**
 * 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* x = nullptr;
    TreeNode* y = nullptr;
    TreeNode* pre = nullptr;
    void recoverTree(TreeNode* root) {
        //进行中序遍历
        dfs(root);
        //如果交换节点都不为空,则进行val交换得到结果
        if(x!=nullptr&&y!=nullptr){
            int temp = x->val;
            x->val = y ->val;
            y->val = temp;
        }
    }
    //中序遍历
    void dfs(TreeNode* root) {
        //如果为空节点,返回
        if(root == nullptr) return;
        //遍历左子树
        dfs(root->left);
        //如果当前节点为第一个节点,则pre = 当前节点
        if(pre == nullptr) pre = root;
        //如果当前节点前面有节点
        else{
            //如果当前节点的值小于前一个节点的值
            if(pre->val > root->val){
                //记录当前节点的值,不停的更新y的节点
                y = root;
                //如果另一个节点为空,则记录前一个节点,固定x节点
                if(x == nullptr) x = pre;
            }
            //每次遍历都需要更新pre节点,即当前节点为前一个节点
            pre = root;
        }
        //遍历右子树
        dfs(root->right);
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/369727.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Text Mesh Pro图文混排如何对任何图片都能实现

1)Text Mesh Pro图文混排如何对任何图片都能实现 2)Unity iOS平台的小图占用特别大的内存 3)只在编辑器内,纹理不开启Read&Write情况下,如何获取纹理所有颜色值 4)准备在海外发行游戏,有哪些…

STM32TIM时钟(1)

文章目录 前言一、介绍部分TIM简介了解定时器类型基本定时器框图通用定时器框图高级定时器框图定时器级联关系 所需简化定时器中断流程图时序部分预分频器时序计数器时序无影子寄存器计数器时序有影子寄存器计数器时序 时钟树 二、实例部分使用定时器计数使用对射红外传感器来控…

PyTorch学习系列教程:卷积神经网络【CNN】

本篇继续深度学习三大基石之卷积神经网络(CNN)——一类在计算机视觉领域大放异彩的网络架构。 LeNet5——CNN的开山之作 前篇介绍了DNN网络,理论上通过增加网络层数可以逼近任意复杂的函数,即通用近似定理。但在实践过程中&#…

Oracle 面试题 | 09.精选Oracle高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Vue3动态CSS

Vue3动态CSS 动态css值动态css对象module模式 动态css值 <template><div class"div">动态css</div> </template><script setup langts> import {ref} from vueconst style ref(blue) </script><style scoped> .div{colo…

【30秒看懂大数据】数据存储

PS:本文属专栏第27篇 公众号&#xff1a;知幽科技 简单说 数据存储是指将数据保存在计算机或其他媒体上&#xff0c;以备将来检索和使用&#xff0c;就像保存文件在电脑硬盘或云存储中一样。 举例理解 听说周末要下大雨&#xff0c;所以我临时决定下班后去超市采购下周末…

深入理解Istio服务网格(一)数据平面Envoy

一、服务网格概述(service mesh) 在传统的微服务架构中&#xff0c;服务间的调用&#xff0c;业务代码需要考虑认证、熔断、服务发现等非业务能力&#xff0c;在某种程度上&#xff0c;表现出了一定的耦合性 服务网格追求高级别的服务流量治理能力&#xff0c;认证、熔断、服…

解锁1688关键字搜索API接口:从海量商品中快速定位,开启商业智能新篇章!

1688关键字搜索API接口技术详解 一、概述 1688关键字搜索API接口是阿里巴巴提供的一套应用程序接口&#xff0c;允许第三方开发者通过关键字搜索1688平台上的商品信息。通过使用这个接口&#xff0c;开发者可以快速获取符合特定关键字的商品列表、详情、属性等信息&#xff0…

Fink CDC数据同步(一)环境部署

1 背景介绍 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 Flink CDC 是 Apache Flink 的一组源连接器&#xff0c;基于数据库日志的…

MySQL进阶45讲【13】为什么表数据删掉一半,表文件大小不变?

1 前言 有些小伙伴在删数据库数据时&#xff0c;会产生一个疑问&#xff0c;我的数据库占用空间大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 那么这篇文章&#xff0c;就介绍一下数据库表的空间回收&#xff0c;看看如…

智安网络2023年度回顾:我与您共存、信任与安全的一年

在2023年这一全球格局加速演变、经济复苏的关键时期&#xff0c;网络安全威胁呈现出前所未有的复杂性。作为中国网络安全行业的新兴企业&#xff0c;智安网络凭借其卓越的安全策略、技术创新和客户服务&#xff0c;书写了企业发展的辉煌篇章。 智安网络在应对网络安全挑战方面…

17- OpenCV:图像矩(Image Moments)和点多边形测试

目录 一、图像矩 1、矩的概念介绍 2、相关的API 3、代码演示 二、点多边形测试 1、概念介绍-点多边形测试 2、cv::pointPolygonTest 3、代码演示 一、图像矩 引言 在数字图像处理、计算机视觉与相关领域中&#xff0c;图像矩(Image moments)是指图像的某些特定像素灰…

嵌入式中物联网核心技术有哪些

IoT军事技术 物联网军事技术是一项利用IoT感知技术在军事活动中获取人、装备、作战环境状态的信息特征&#xff0c;从而实现在军事活动中做出智能化决策和控制局势的军事方针。 据悉&#xff0c;早于2012年10月军方联合了社会研究机构合力创建了“军事物联网联合实验室”。 …

论文阅读-在分布式数据库环境中对哈希算法进行负载均衡基准测试

论文名称&#xff1a;Benchmarking Hashing Algorithms for Load Balancing in a Distributed Database Environment 摘要 现代高负载应用使用多个数据库实例存储数据。这样的架构需要数据一致性&#xff0c;并且确保数据在节点之间均匀分布很重要。负载均衡被用来实现这些目…

环形链表(快慢指针)

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环…

LINE官方账号全攻略:设置流程与基本功能

LINE官方账号是专为企业和品牌而设计&#xff0c;提供了更多的商业功能和定制选项。在中国台湾、日本和东南亚这些地区&#xff0c;LINE相比其他社交媒体软件具有更大的用户群体和更广泛的影响力&#xff0c;尤其在台湾和泰国地区&#xff0c;有90%的人都在使用LINE。而且LINE官…

1Panel应用推荐:青龙定时任务管理平台

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

769933-15-5,Biotin aniline,可以合成多种有机化合物和聚合物

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;769933-15-5&#xff0c;Biotin aniline&#xff0c;生物素苯胺&#xff0c;生物素-苯胺 一、基本信息 产品简介&#xff1a;Biotin Aniline&#xff0c;一种具有重要生物学功能的化合物&#xff0c;不仅参与了维生…

PHP入门指南:进阶篇

PHP入门指南&#xff1a;进阶篇 PHP入门指南&#xff1a;进阶篇1. 面向对象编程&#xff08;OOP&#xff09;1.1 类和对象的基本概念1.2 构造函数和析构函数1.3 属性和方法的访问控制1.4 继承与多态 2. 错误和异常处理2.1 错误处理机制2.2 异常处理机制2.3 自定义异常类 3. PHP…

免费ai绘画软件选择哪个?

对于免费AI绘画软件的选择&#xff0c;因为每个软件都有其独特的优点和适用场景&#xff0c;可以根据个人的需求和技能水平来决定。以下是被广泛认可的AI绘画软件&#xff1a; 1、建e网AI-一款为建筑室内设计师提供AI绘图的智能工具&#xff0c;具有文字生图&#xff0c;方案优…