Skip to content

226 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

题解

首先镜像一棵树看起来是挺复杂的。但是我们要分解一下对于一棵小树来说怎么翻转。对于只有三个节点的树来说,翻转一下只需要交换左右节点。升级一下,对于7个节点的满二叉树来说,翻转过程其实可以重复的,先交换第二层的左右节点,然后分别再交换第二层的左子树和右子树。所以这个过程其实类似于先序遍历。

先序遍历的递归结构是

javascript
var preOrderRecursive = function(root) {
    const preOrderInner = (root, result) => {
        if (!root) {
            return
        }
        result.push(root.val)
        preOrderInner(root.left, result)
        preOrderInner(root.right, result)
    }
    const result = []
    preOrderInner(root, result)
    return result
}

我们这里不需要保存处理的结果,只需要交换就可以,所以我们的参数只有root

javascript
var invertTree = function(root) {
    var invertTreeRecur = function(root) {
        if(!root) {
            return root
        }
        //swap
        const temp = root.left;
        root.left = root.right;
        root.right = temp;

        //先序遍历
        invertTreeRecur(root.left)
        invertTreeRecur(root.right)

        return root
    }

    return invertTreeRecur(root)
}

上次更新于: