题目:
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note:
A solution using O(
n
) space is pretty straight forward. Could you devise a constant space solution?
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
思路:
中序遍历整个二叉搜索树,若发现数值未按序排列,则为有问题的节点。最后还得考虑只有两个节点的情况。
代码:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* res1;
TreeNode* res2;
TreeNode* res3;
TreeNode* pre;
TreeNode* cur;
int num;
void recoverTree(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
num = INT_MIN;
res1 = NULL;
res2 = NULL;
res3 = NULL;
pre = NULL;
cur = NULL;
searchTree(root);
if(res2 == NULL)
{
int t = res1->val;
res1->val = res3->val;
res3->val = t;
}
else
{
int t = res1->val;
res1->val = res2->val;
res2->val = t;
}
}
void searchTree(TreeNode* root)
{
if(root == NULL)
{
return;
}
else
{
searchTree(root->left);
pre = cur;
cur = root;
if(res1 == NULL)
{
if(pre != NULL && pre->val > cur->val)
{
res1 = pre;
res3 = cur;
}
}
else if(res2 == NULL)
{
if(pre != NULL && pre->val > cur->val)
{
res2 = cur;
}
}
searchTree(root->right);
}
}
};