Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
vector<TreeNode *> nodeque;
public:
void mid_order(TreeNode *node)
{
if(node !=NULL)
{
mid_order(node->left);
nodeque.push_back(node);
mid_order(node->right);
}
}
void recoverTree(TreeNode *root) {
mid_order(root);
TreeNode *node1;
TreeNode *node2;
TreeNode *nodeerr1;
TreeNode *nodeerr2;
for(int i=0;i<nodeque.size()-1;i++)
{
node1=nodeque.at(i);
node2=nodeque.at(i+1);
if(node1->val>node2->val)
{
nodeerr1=node1;
break;
}
}
for(int i=nodeque.size()-1;i>0;i--)
{
node1=nodeque.at(i);
node2=nodeque.at(i-1);
if(node1->val<node2->val)
{
nodeerr2=node1;
break;
}
}
int tmp=nodeerr1->val;
nodeerr1->val=nodeerr2->val;
nodeerr2->val=tmp;
}
};