/** * 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); } };