LeetCode OJ - Recover Binary Search Tree

题目:

Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure.

Note:
A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?

解题思路:

中序遍历BST,在遍历过程中记录出现错误的节点。err_1是第一次发生pre_val > root_val的节点,err_2是最后一次发生pre_val > root_val的节点。最后交换err_1->val 和 err_2->val

代码:

 1 /**
 2  * Definition for binary tree
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     TreeNode *err_1, *err_2;
13     TreeNode *pre;
14     
15     void find2Nodes(TreeNode *root) {
16         if (root == NULL) return;
17         
18         if (root->left != NULL) {
19             find2Nodes(root->left);
20         }
21         if (pre != NULL && pre->val >= root->val) {
22             if (err_1 == NULL) err_1 = pre;
23             err_2 = root;
24         }
25         pre = root;
26         if (root->right != NULL) {
27             find2Nodes(root->right);
28         }
29     }
30     
31     void recoverTree(TreeNode *root) {
32         if (root == NULL) return;
33         
34         err_1 = err_2 = pre = NULL;
35         
36         find2Nodes(root);
37         swap(err_1->val, err_2->val);
38     }
39 };

 

转载于:https://www.cnblogs.com/dongguangqing/p/3737265.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql中间件是运维工作内容_linux运维工作的七项内容

一,【基础运维检查】或叫 例行检查 或叫 例行巡检mail cacti1.理解例行检查列表的内容、检查项的含义以及可能引发的问题。2.按照例行检查表,定期检查系统状态,发现异常立即通报并推进解决。3.定期检查线上服务模块,排除可疑进程,…

java executor_Java并发编程(08):Executor线程池框架

一、Executor框架简介1、基础简介Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的实现类,提供便捷方式来提交任务并且获取任务执行结果,封装了任务执行的过程,不再需要Thread().st…

Exchange 2007迁移Exchange 2010应该注意的13件事

1. Exchange 2007可以支持升级到Exchange 2010,但需要提前将Exchange 2007所有服务器环境升级至 SP2或以上版本。2. Exchange 2007如果更新至SP2或以上版本,则建议按照以下顺序进行各角色的更新: CAS、UM、HUB、Edge、Mailbox。3. …

dom4j操作XML

(一)创建Document的基本操作 /** * XML基本操作 */ public void BaseOperation(){ //创建一个document Document documentDocumentHelper.createDocument(); //创建根结点 Element rootdocument.addElement("root"); //为根结点添加一个book节点 Element …

Oracle数据库中闪回恢复的详细分析

Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的。这个功能有很大的限制,就是相关事务的undo不能被覆盖,否则就无力回天了。oracle10g大大的增强了闪回查询的功能,并且提…

python 查看当前目录_「Python」打包分发工具setuptools学习

❝setuptools是python标准的打包分发工具,它可以将我们编写的python项目打包安装,这样其他同事就可以像调用标准库或python第三方库那样直接使用;也可以将项目上传到Pypi供更多人的下载安装使用。❞1. 项目结构项目结构❝这是一个打包构建好的…

如何杀掉D状态的进程?[zt]【转】

转自:http://blog.csdn.net/chinalinuxzend/article/details/4288791 [-] 如何杀掉D状态的进程zt相关博文原贴:http://www.xclinux.cn/?p752 如何杀掉D状态的进程?[zt] 状态为 D (Uninterruptible sleep) ,以及状态为 Z (Zombie)这些垃圾进程…

九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)

九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题 (参与算法&面试题交流与讨论,请加群:30382647)引言 自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久&#…

mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

一、数据库结构优化(非常重要)1.1 数据库结构优化目的1、减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余;2、尽量避免数据维护中出现…

python git是什么_python爬虫之git的使用

一、简单认识: 1、初始化文件夹为版本控制文件夹,首先建立一个文件夹,进入这个文件夹以后输入git init初始化这个文件夹。2、Git几种位置概念 1、本地代码:本地更改完代码以后,虽然是存放在git的文件夹里面&#xff0c…

产品经理网站数据分析之测量问题现状(二)

本章续接上文,主要讲解流程图的绘制要领,以及示例。 1、基础流程图 基础流程图应该简明扼要地描述出流程的主要结构,在弄清楚流程的起点、终点,以及主要步骤后,按照流程的先后顺序,按照要展示的流程长短比例…

键盘流的逆袭- Idea 中使用 VIM mode 提高生成效率

Idea 中使用 VIM mode 提高生成效率 安装配置 Idea 的 vim 插件 先挖坑,后续再填。这个毫无技术含量,不写了,自己去搜吧。 快捷键代替鼠标 打开文件 按两下 shift 键 > 输入类目文件名按 command e ,打开最近编辑的文件列表&a…

git 撤销挂起的更改_Timer计时任务因系统时间的修改导致挂起解决方案

之前开发的一款运行在定制Android设备上的一个实时监控程序发生了一个很奇怪的问题:关机状态下放置了半个月左右的时间之后,再次开机使用,使用到一半的时候,显示界面就卡死在某一个状态下了(显示界面只显示一行文字,代…

yii urlmanager配置post不生效_一文带你彻底学会 Git Hooks 配置

你好,我是小桔,是一个没有感情的代码崽。今天给大家介绍一下 Git Hooks,相信 Git 大家都在用吧,Git 除了用作版本控制,还有许多高级功能,Git Hooks 就是其中之一。本文环境:Git 版本&#xff1a…

Tiff – 值得你体验一下的可视化的字体对比工具

Tiff 是一款字体对比工具,可视化对比两种字体之间的差异。这是一个工具来帮助比较两种字体,同时学习排版。在这一点上,谷歌 Web 字体作为 Tiff 外部字体文件的唯一来源。由于应用程序使用的一些功能需要 HTML5 和 CSS3 支持,因此请…

[.NET] 建构子中传递子对象的对象

在设计对象继承的时候&#xff0c;父对象建构子会需要一些参数&#xff0c;这些参数可以由子对象建构子透过base关键词来提供。 namespace Test001 {public class ParentClass{// Constructorspublic ParentClass(IEnumerable<string> dataCollection){this.DataCollecti…

php基础教程(三):变量

1、php变量规则 变量以 $ 符号开头&#xff0c;其后是变量的名称变量名称必须以字母或下划线开头变量名称不能以数字开头变量名称只能包含字母数字字符和下划线&#xff08;A-z、0-9 以及 _&#xff09;变量名称对大小写敏感&#xff08;$y 与 $Y 是两个不同的变量&#xff09;…

操作系统实验文件管理_系统设计硬核知识(5)——操作系统的文件管理

操作系统对计算机的管理包括两个方面&#xff1a;硬件资源和软件资源。硬件资源的管理包括CPU 的管理、存储器的管理、设备管理等&#xff0c;主要解决硬件资源的有效和合理利用问题。软件资源包括各种系统程序、各种应用程序、各种用户程序&#xff0c;也包括大量的文档材料、…

错误 0xc0202049: 数据流任务 1: 无法在只读列“ID”中插入数据

数据库导入导出时总失败&#xff0c;错误信息如下&#xff1a; 正在验证 (错误) 消息错误 0xc0202049: 数据流任务 1: 无法在只读列“ID”中插入数据。 (SQL Server 导入和导出向导) 错误 0xc0202045: 数据流任务 1: 验证列元数据失败。 (SQL Server 导入和导出向导) 错误 0xc0…

python中的items方法_Python 字典的items()方法和iteritems()方法有什么不同?【面试题详解】...

今天爱分享给大家带来Python 字典的items()方法和iteritems()方法有什么不同?【面试题详解】&#xff0c;希望能够帮助到大家。 字典是 Python 语言中唯一的映射类型。映射类型对象里哈希键(键&#xff0c;key)和指向的对象&#xff08;值&#xff0c;value)是多对一的关系&am…