/**
* 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* first = NULL;
TreeNode* second = NULL;
TreeNode* prev = new TreeNode(INT_MIN);
void recoverTree(TreeNode *root)
{
inOrder(root);
swap(first->val, second->val);
}
void inOrder(TreeNode* root)
{
if(root == NULL)
return;
inOrder(root->left);
if(root->val < prev->val)
{
if(first == NULL)
first = prev;
second = root;
}
else
prev = root;
inOrder(root->right);
}
};
这道题的解法和 Validate Binary Search Tree 类似 ,都用到了前一个节点。