LeetCode OJ 之 Recover Binary Search Tree(恢复二叉搜索树)
2015-06-10 08:38
375 查看
题目:
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?
一个二叉搜索树的两个结点被互换了,不改变它的结构恢复二叉树。
思路:
中序遍历过程中找出这两个弄错位置的结点,然后互换这两个结点的值。代码:
/*** Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *mistake1 , *mistake2 , *pre;
void recoverTree(TreeNode* root)
{
findMistake(root);
if(mistake1 && mistake2)
swap(mistake1->val , mistake2->val);
}
void findMistake(TreeNode *root)
{
if(root == NULL)
return;
findMistake(root->left);
if(mistake1 == NULL && pre && pre->val >= root->val)
mistake1 = pre;
if(mistake1 && pre->val >= root->val)
mistake2 = root;
pre = root;
findMistake(root->right);
}
};
相关文章推荐
- hadoop编程实例--平均成绩
- 第十四周 项目1-小玩文件(2)
- 深入理解虚拟机类加载机制
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
- 点点滴滴
- 第十四周 项目一 小玩文件(1)
- Windows下的codeblocks+MinGW开发C++运行环境
- 第十四周上机项目1.2小玩文件
- [JQ权威指南]第二天:JQuery控制CSS样式
- .Net 转战 Android 4.4 日常笔记目录
- SDL 开发
- entity framework 时间操作
- 第二周 项目二 长方形类
- 第十四周项目4 - 处理C++源代码的程序({}换行)
- 第十四周阅读程序2:运用文件流进行文件的复制
- 第14周程序阅读 例4.1
- Unity 中,FPS 第一人称行走,按A键,一直后退。WASD方向控制错误
- classpath
- stm32.cube(一)——系统架构及目录结构
- 第十四周程序阅读例二