class Solution {
public:
void recoverTree(TreeNode* root) {
vector<TreeNode*> order;
inorder(root, &order);
for(int i =0;i<order.size();i++){
cout<<order[i]->val<<" ";
}
cout<<endl;
int first = 0,second = 0;
for(int i = 0;i<order.size()-1;i++){
if((order[i+1]->val)>=(order[i]->val)){
continue;
}else{
first = i;
break;
}
}
for(int i = order.size()-1;i>0;i--){
if(order[i]->val<order[i-1]->val){
second = i;
break;
}
}
int temp = order[first]->val;
order[first]->val = order[second]->val;
order[second]->val = temp;
for(int i =0;i<order.size();i++){
cout<<order[i]->val<<" ";
}
}
void inorder(TreeNode* root,vector<TreeNode*>* order){
if(root == NULL)
return;
inorder(root->left, order);
order->push_back(root);
inorder(root->right, order);
}
};