Recursive
class Solution {
public:
TreeNode p,q,*prev;
void recoverTree(TreeNode* root) {
inOrder(root);
swap(p->val,q->val);
}
void inOrder(TreeNode* root){
if(root->left) inOrder(root->left);
if(prev&&prev->val>root->val){
if(!p)
p=prev;
q=root;
}
prev=root;
if(root->right) inOrder(root->right);
}
};
Last updated
Was this helpful?