/**
* 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 *firstElem = NULL;
TreeNode *secondElem = NULL;
TreeNode *preElem = new TreeNode(INT_MIN);
void recoverTree(TreeNode *root) {
inOrderTraverse(root);
int tmp = firstElem->val;
firstElem->val = secondElem->val;
secondElem->val = tmp;
}
void inOrderTraverse(TreeNode *root)
{
if(root==NULL)
return ;
inOrderTraverse(root->left);
if(firstElem== NULL&&preElem->val>=root->val)
firstElem = preElem;
if(firstElem !=NULL &&preElem->val>=root->val)
secondElem = root;
preElem = root;
inOrderTraverse(root->right);
}
};

京公网安备 11010502036488号