【leetcode】Recover Binary Search Tree
来源:互联网 发布:oracle数据库的decode 编辑:程序博客网 时间:2024/06/11 21:57
问题:
给定的二叉查找树中,有两个节点不小心被调换了位置,现在需要将其修正,不改变树的结构。
分析:
二叉排序树的中序遍历是有序的,所以这个问题又是建立在中序遍历模板上的问题,所以我们可以对其进行中序遍历,并用一个pre指针指向当前遍历结果中的最后一个结点,即下次遍历前的前一个结点。然后就可以通过将当前结点与pre结点进行比较,来判断是否有序了。若乱序,就将这两个结点都放入到预先定义的容器中。
错误的形式就这两种,我们看到,在乱序容器中,最多就存了四个元素,所以空间复杂度还是满足O(n)的,当然也可以用两个指针分别指向要进行调整的两个结点,如上图分别指向 2 和 1, 4 和 1.
实现:
//store disorder nodes, most of the number is 4.vector<TreeNode*> outorder;//point to the last node of inorder sequenceTreeNode *pre = NULL;void visitInorder(TreeNode* root){if(root == NULL)return;if(root->left)visitInorder(root->left);if(pre == NULL)pre = root;else if(root->val < pre->val){ outorder.push_back(pre);outorder.push_back(root);}//move pre to the new tail.pre = root;if(root->right)visitInorder(root->right);}void recoverTree(TreeNode *root) {if( NULL == root )return;visitInorder(root);if(outorder.size()){swap(outorder[0]->val, outorder[outorder.size() - 1]->val);}}
0 0
- LeetCode: Recover Binary Search Tree
- LeetCode: Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- [Leetcode] Recover Binary Search Tree
- [leetcode] recover binary search tree
- LeetCode -- Recover Binary Search Tree
- [LeetCode]Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- LeetCode:Recover Binary Search Tree
- [Leetcode]Recover Binary Search Tree
- Leetcode: Recover Binary Search Tree
- LeetCode-Recover Binary Search Tree
- [leetcode] Recover Binary Search Tree
- [LeetCode] Recover Binary Search Tree
- 【Leetcode】Recover Binary Search Tree
- Leetcode Recover Binary Search Tree
- LeetCode | Recover Binary Search Tree
- NSMutableURLRequest实现Post请求及其timeoutInterval不生效问题解决
- working copy locked 问题
- java线程:单例隐藏ThreadLocal实现线程数据共享
- 谷歌地图高清卫星地图、电子地图和地形图有什么区别?
- java swing实现小球沿正弦曲线运动的代码
- 【leetcode】Recover Binary Search Tree
- 二叉搜索树学习
- GetBuffer
- webrtc--AudioProcessing的使用
- ubuntu下nginx安装手记
- 基于OpenStack构建手写识别数据即服务云平台
- 全渠道时代的金融网络解决方案
- 高考特招腐败要通过“雷霆万钧”的惩处
- 防遗忘笔记,Fedora交叉编译window下的virt-iewer的汉化