[leetcode]Recover Binary Search Tree

此题以前看过,就是中序遍历。相当于有一个排序的数组里面有两个数字调换了,有两种情况,调换的数字相邻和不相邻。

public class Solution {
    public void recoverTree(TreeNode root) {
        Stack<TreeNode> stack = new Stack<TreeNode>();
        TreeNode n = root;
        TreeNode last = null;
        TreeNode current = null;
        TreeNode n1 = null;
        TreeNode n2 = null;
        while (n != null || !stack.empty()) {
            if (n != null) {
                stack.push(n);
                n = n.left;
            }
            else {
                n = stack.pop();
                // visit n
                last = current;
                current = n;
                if (last != null && current != null && last.val > current.val) {
                    if (n1 == null) {
                        n1 = last;
                        n2 = current;
                    }
                    else {
                        n2 = current;
                    }
                }
                n = n.right;
            }
        }
        if (n1 != null && n2 != null) {
            int tmp = n1.val;
            n1.val = n2.val;
            n2.val = tmp;
        }
    }
}

  

 

posted @ 2013-08-16 18:37  阿牧遥  阅读(215)  评论(0编辑  收藏  举报