package com.interview.books.leetcodeoj; import com.interview.leetcode.utils.TreeNode; /** * Created_By: stefanie * Date: 14-12-26 * Time: 下午2:12 */ public class LOJ99_RecoverBinarySearchTree { //find the breakpoint during in-order traverse by checking last visited node //swap the values of breakpoint node TreeNode first; TreeNode second; TreeNode last; public void recoverTree(TreeNode root) { first = null; second = null; last = null; findBreakpoint(root); Integer tmp = first.val; first.val = second.val; second.val = tmp; } public void findBreakpoint(TreeNode node){ if(node == null) return; findBreakpoint(node.left); if(last != null && node.val < last.val){ if(first == null) first = last; second = node; } last = node; findBreakpoint(node.right); } }