morris
class Solution {
public:
TreeNode m1,m2,*prev;
void recoverTree(TreeNode* root) {
TreeNode p=root, temp;
//vector<int> ret;
while(p){
temp=p->left;
if(!temp){
inOrder(p);
p=p->right;
}
else{
while(temp->right!=nullptr && temp->right!=p)
temp=temp->right;
if(!temp->right){
temp->right=p;
p=p->left;
}else{
temp->right=nullptr;
inOrder(p);
p=p->right;
}
}
}
swap(m1->val,m2->val);
}
void inOrder(TreeNode* root){
if(prev&&prev->val>root->val){
if(!m1)
m1=prev;
m2=root;
}
prev=root;
}
};
Last updated
Was this helpful?