Recover Binary Search Tree
来源:互联网 发布:中国古典风格网站源码 编辑:程序博客网 时间:2024/05/21 06:55
首先,对BST中序遍历,得到的就是有序数列。 所以,交换BST中的两个节点,会相应导致中序遍历序列的两个节点位置的交换。
以例子说明: 对于序列1,2,3,4,5,6,7 交换两个数字有两种情况
1, 交换相邻的两个, 比如2,3. 会得到 1,3,2,4,5,6,7 , 会出现一个数的小于其前驱的情况, 那只需要把这个数和它的前驱交换即可;
2,交换非相邻的两个,比如2,6. 会得到1,6,3,4,5,2,7 ,会出现两个数字小于其前驱的情况,这个时候就需要交换第一个数的前驱和第二个数。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<TreeNode*>v; TreeNode *pre; void check(TreeNode *root) { if(v.size() == 4) return; if(root->left) check(root->left); int key = root->val; if(pre) { if(key < pre->val) { v.push_back(pre); v.push_back(root); } } pre = root; if(root->right) check(root->right); } void recoverTree(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if(root == NULL) return; v.clear(); pre = NULL; check(root); swap(v[0]->val, v[v.size()-1]->val); }};
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- Recover Binary Search Tree
- 【分享】一句代码提升进程权限
- C#存储时间字段到SQLite中,出现错误
- Linux(Ubuntu) 下 SecureCRT 7 30天循环破解
- GB2312,GBK,Unicode的理解
- replace与replaceAll的区别
- Recover Binary Search Tree
- android 打包 到处签名apk时错误
- Javascript实用技巧
- 数据库的隔离级别
- S3C2440驱动移植——SPI .
- 关于UIPopoverController的 使用
- Prime Bases
- AIS解码2
- iOS:初始值、零值、空值(一)--变量及判断