leetcode 099 —— Recover Binary Search Tree
2015-08-08 15:24
344 查看
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?
思路:
O(n)的方法就是 将树用中序遍历打印出来,从左往右搜索,记录两次s[i]>s[i+1]的时刻,第一次的s[i],和第二次的s[i+1],即是我们要找的两个破坏点
O(1)的方法就是,省去将数的元素全部排列的步骤,用三个指针,node1,node2,pre,分别记录 第一次的乱序的前一个点,node[2]记录每次乱序的第二个点。
pre是指扫描到当前节点时的前一个点。只有当pre->val > root->val 时,说明乱序了。
class Solution {
TreeNode *node1 = nullptr;
TreeNode *node2 = nullptr;
TreeNode *pre = nullptr;
public:
void recoverTree(TreeNode* root) {
searchTwo(root);
swap(node1->val, node2->val);
}
void searchTwo(TreeNode* root){
if (!root) return;
searchTwo(root->left);
if (pre&&pre->val > root->val){ //前一个点大于当前点,说明前一个点是破坏点
if (!node1)
node1 = pre; //第一个点可以确定下来,但是node2还是要往后继续搜索
node2 = root; //node2一直等于 root
}
pre = root;
searchTwo(root->right);
}
};
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?
思路:
O(n)的方法就是 将树用中序遍历打印出来,从左往右搜索,记录两次s[i]>s[i+1]的时刻,第一次的s[i],和第二次的s[i+1],即是我们要找的两个破坏点
O(1)的方法就是,省去将数的元素全部排列的步骤,用三个指针,node1,node2,pre,分别记录 第一次的乱序的前一个点,node[2]记录每次乱序的第二个点。
pre是指扫描到当前节点时的前一个点。只有当pre->val > root->val 时,说明乱序了。
class Solution {
TreeNode *node1 = nullptr;
TreeNode *node2 = nullptr;
TreeNode *pre = nullptr;
public:
void recoverTree(TreeNode* root) {
searchTwo(root);
swap(node1->val, node2->val);
}
void searchTwo(TreeNode* root){
if (!root) return;
searchTwo(root->left);
if (pre&&pre->val > root->val){ //前一个点大于当前点,说明前一个点是破坏点
if (!node1)
node1 = pre; //第一个点可以确定下来,但是node2还是要往后继续搜索
node2 = root; //node2一直等于 root
}
pre = root;
searchTwo(root->right);
}
};
相关文章推荐
- 整合Apache+PHP+MySQL
- 夏季“吃苦”应量力而行
- 士兵队列训练问题
- Caffe Layer结构
- 单文件上传与多文件上传的文件上传类
- Linux操作系统-标准IO库(3)
- MyEclipse10 安装
- 威佐夫博弈(原理与性质)
- UIProgress控件的属性和方法
- php高级教程
- (转)西游记团队哲学
- OpenCV4Android杂记
- gstreamer 安装ffmpeg插件
- Bootstrap的js插件之侧边栏停靠(affix)
- POJ 1251 Jungle Roads
- 75 thinkphp 关联模型
- opencv waitkey使用注意点
- OpenCV在Windows下编译WITH_Qt
- C#调用RESTful API
- POJ1316 Self Numbers