class Solution {
public void recoverTree(TreeNode root) {
TreeNode cur=root,pre=null,node1=null,node2=null, p=null;
while(cur!=null)
{
if(cur.left!=null)
{
pre=cur.left;
while(pre.right!=null&&pre.right!=cur)
pre=pre.right;
if(pre.right==null)
{
pre.right=cur;
cur=cur.left;
}
else
{
if(p!=null&&cur!=null&&p.val>cur.val)
{
if(node1==null)
node1=p;
node2=cur;
}
pre.right=null;
p=cur;
cur=cur.right;
}
}
else
{
if(p!=null&&cur!=null&&p.val>cur.val)
{
if(node1==null)
node1=p;
node2=cur;
}
p=cur;
cur=cur.right;
}
}
int tmp=node1.val;
node1.val=node2.val;
node2.val=tmp;
}
}