用时:60min

思路还是中序遍历,使用pre缓存前一个节点,因为中序遍历是递增的,所以一定是先找到大的,再找到小的。

所以第一个出问题的是pre,第二个是root

var recoverTree = function(root) {
    var left = null    var right = null    var pre = null    // 一定是先找到大的,再找到小的,所以第一个出问题的是pre,第二个出问题的是root    var DFS = function (root) {
        if (root.left) {
            DFS(root.left)
        }
        if (pre) {
            console.log(pre.val)
            if (pre.val > root.val) {
                if(!left) {
                    left = pre
                    right = root                } else {
                    right = root                }
            }
            pre = root        } else {
            pre = root        }
        if (root.right) {
            DFS(root.right)
        }
    }
    DFS(root)
    if (left && right) {
        [left.val,right.val] = [right.val,left.val]
    }
    return root}