Recover Binary Search Tree
来源:互联网 发布:javascript与jsp 编辑:程序博客网 时间:2024/05/01 06:43
使用Morris中序遍历,时间复杂度O(n),空间O(1)。
因为被交换的两个元素不一定相邻,所以可能需要多次swap才能恢复。此处应用的策略是记录第一次Invalid的第一个元素和最后一次Invalid的第二个元素,然后最后做一次swap。
class Solution {public: void recoverTree(TreeNode *root) { TreeNode *cur = root, *prev = NULL; pair<TreeNode*, TreeNode*> broken; while(cur) { if(cur->left == NULL) { //visit cur detect(broken, prev, cur); prev = cur; cur = cur->right; }else { TreeNode *tmp = cur->left; while(tmp->right != NULL && tmp->right != cur) tmp = tmp->right; if(tmp->right == NULL) { tmp->right = cur; cur = cur->left; } else { //visit cur detect(broken, prev, cur); tmp->right = NULL; prev = cur; cur = cur->right; } } } swap(broken.first->val, broken.second->val); } void detect(pair<TreeNode*, TreeNode*> &broken, TreeNode *prev, TreeNode *cur) { if(prev != NULL && prev->val > cur->val) { //record the first element of the first invalid and the second element of the last invalid if(broken.first == NULL) broken.first = prev; broken.second = cur; } }};
0 0
- 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
- jsp与mysql配合使用时 中文乱码 解决方法
- 计科1112班 算法概论第一周作业
- hbase安装配置(整合到hadoop)
- Socket的阻塞模式和非阻塞模式
- eclipse创建分支遇到的问题(初稿)
- Recover Binary Search Tree
- 《云端时代杀手级应用:大数据分析》扫描版[PDF]
- 2013级C++第3周【项目3 - 时间类】
- android 生成缩略图
- LA 4452 The Ministers' Major Mess(2-SAT)
- 1324:算法2-2:有序线性表的有序合并
- Windows 7安装CentOS6.5 双系统
- Grinder
- WPF: 把引用的dll移动到自定义路径