[leetcode] 100.Recover Binary Search Tree
来源:互联网 发布:java cgi是什么 编辑:程序博客网 时间:2024/06/03 21:28
题目:
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
题意:
二叉搜索树中有两个节点互换了位置,现在需要找出这两个节点来修复这个二叉搜索树。
思路:
依旧依据搜索二叉树的顺序的性质,如果搜索二叉树是正确的,那么所有节点按照中序遍历的话是一个升序的数组。但是现在有两个节点互相交换了位置。比如原先是A1,A2,A3,…An,现在变成了A1,A2…Aj…Ai..An,即Ai与Aj互换了位置。这个时候Aj比它后面的元素大。Ai比它前面的元素小,也就是Ai前面的元素比Ai大。很明显,都是出现了某个元素比后面这个元素大。而这个比后面元素大的节点可能是Aj也可能是Ai,所以我们需要保存着四个值,Aj与后面的元素,Ai与前面的元素,这两对元素都是前面的比后面的大,我们称其为两对逆序对,本质上是无法区分开来。还有种可能,不会出现两对值,如果Ai与Aj相邻的话,那么只会出现一对逆序值。
以上。
代码如下:
/** * 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) { if(root == NULL)return; TreeNode* lastNode = NULL,*small = NULL,*smallLast = NULL,*big = NULL,*bigNext = NULL; InorderTree(root,lastNode,small,smallLast,big,bigNext); if(big == NULL){ swap(small->val,smallLast->val); } } void InorderTree(TreeNode* root,TreeNode* &lastNode,TreeNode* &small, TreeNode* &smallLast,TreeNode* &big,TreeNode* &bigNext){ if(root == NULL)return; InorderTree(root->left,lastNode,small,smallLast,big,bigNext); if(lastNode != NULL){ if(root->val < lastNode->val){ if(small == NULL){ small = root; smallLast = lastNode; } else{ big = lastNode; bigNext = root; if(small->val < bigNext->val && big->val > smallLast->val){ swap(small->val,big->val); return; } else{ swap(smallLast->val,bigNext->val); return; } } } } lastNode = root; InorderTree(root->right,lastNode,small,smallLast,big,bigNext); }};
0 0
- [leetcode] 100.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
- 8.17
- 认识StringBuffer
- IOS微信音乐播放问题
- 常用排序算法之冒泡排序
- 通信原理课程设计报告
- [leetcode] 100.Recover Binary Search Tree
- 我的异常大全之spring
- RabbitMQ安全相关的网络资源介绍
- HashMap经典存储--分拣思路
- 数据结构的基本内容
- 认识StringBuffer
- java中的匿名内部类
- 1011--映射一对多关联关系(.单向 n-1)
- Vitamio的最简单Demo-MediaPlayer