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; } }