1.中旬遍历二叉树,保存遍历的指针到vector中
2.遍历vector 查找错误的位置
3.交换数据
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
void Inorder(TreeNode *root,vector<TreeNode *> &vec){
if(root==NULL)return;
Inorder(root->left,vec);
vec.push_back(root);
Inorder(root->right,vec);
}
public:
void recoverTree(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<TreeNode*> vec;
Inorder(root,vec);
TreeNode *first=NULL,*second=NULL;
bool f=true;
for(int i=1;i<vec.size();++i){
if(vec[i]->val<vec[i-1]->val){
if(f){
first=vec[i-1];
f=false;
}
second=vec[i];
}
}
swap(first->val,second->val);
}
};