private void inOrder(TreeNode curr, Wrap w) { if (curr == null) return; inOrder(curr.left, w); if (w.prev != null && w.prev.val > curr.val) { if (first == null) { first = w.prev; } second = curr; } w.prev = curr; inOrder(curr.right, w); }
public void recoverTree(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function first = null; second = null; // inOrder(root, null); Wrap w = new Wrap(); w.prev = null; inOrder(root, w); int tmp = first.val; first.val = second.val; second.val = tmp; }