leetcode#99 Recover Binary Search Tree
来源:互联网 发布:笔记本电脑必要软件 编辑:程序博客网 时间:2024/05/19 16:51
Description:
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Solution:
这道题如果不考虑空间占用的话只要中序遍历找到乱序的两个数就可以了。但是题目中有说最好使用一个空间为O(1)的算法。那我们需要中序遍历整棵数,并记录和维护当前节点及当前节点中序遍历的前一个节点。不使用递归可以使用Morris遍历来实现。即,若当前节点存在左子树,使用循环来寻找当前节点的上一个节点,并把上一个节点的右节点链接到当前节点,然后当前节点左移;若当前节点不存在左子树,则当前节点右移。
/** * 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: void recoverTree(TreeNode* root) { TreeNode *first = NULL, *second = NULL; TreeNode* cur = root; TreeNode* prior = NULL, *tmp = NULL; while(cur) { if (cur->left) { tmp = cur->left; while(tmp->right && tmp->right != cur) tmp = tmp->right; if (tmp->right == cur) { tmp->right = NULL; prior = tmp; if (prior != NULL && prior->val > cur->val) { if (first == NULL) first = prior; second = cur; } prior = cur; cur = cur->right; } else { tmp->right = cur; cur = cur->left; } } else { if (prior != NULL && prior->val > cur->val) { if (first == NULL) first = prior; second = cur; } prior = cur; cur = cur->right; } } if (first != NULL && second != NULL) { int temp = first->val; first->val = second->val; second->val = temp; } }};
0 0
- LeetCode 99: Recover Binary Search Tree
- LeetCode(99)Recover Binary Search Tree
- LeetCode 99 Recover Binary Search Tree
- LeetCode(99) Recover Binary Search Tree
- [leetcode 99] Recover Binary Search Tree
- [leetcode]99 Recover Binary Search Tree
- leetcode || 99、Recover Binary Search Tree
- 【LeetCode #99】Recover Binary Search Tree
- leetcode 99: Recover Binary Search Tree
- [leetcode-99]Recover Binary Search Tree(java)
- leetCode 99: Recover Binary Search Tree
- LeetCode(99) Recover Binary Search Tree
- LeetCode 99: Recover Binary Search Tree
- LeetCode 99:Recover Binary Search Tree
- (leetcode 99) Recover Binary Search Tree
- leetcode 99 Recover Binary Search Tree (python)
- LeetCode #99: Recover Binary Search Tree
- Leetcode 99 Recover Binary Search Tree
- 常用的五大排序
- 如何用postman控制ODL设置端口的QoS, 并下发流表到交换机做限速配置
- Linux 下显示黑客帝国的矩阵效果
- 有关按键的专利
- angular2系列教程(五)Structural directives、再谈组件生命周期
- leetcode#99 Recover Binary Search Tree
- 数据源
- 基本操作
- 每日一练之Two sum [leetcode No.1]
- 欢迎使用CSDN-markdown编辑器
- hibernate入门和基本操作
- 交叉验证的理解
- Java并发编程:并发容器之CopyOnWriteArrayList(转载)
- php的phpMyAdmin数据库怎么装上使用