[路飞]_翻转二叉树

96 阅读1分钟

leetcode-226 翻转二叉树
b站视频

题目介绍

翻转一棵二叉树。

示例

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

备注:
这个问题是受到 Max Howell 的 原问题 启发的 :

    谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

解题思路

利用递归的方法,依次交换每个节点的左右两棵子树的位置,最后返回交换位置之后的树

1.gif

解题代码

var invertTree = function(root) {
    if (root) {
        // 交换节点的左右两棵子树
        [root.left, root.right] = [root.right, root.left]
        // 如果有左子树就对左子树进行交换
        root.left && invertTree(root.left)
        // 如果有右子树就对右子树进行交换
        root.right && invertTree(root.right)
    }
    return root
};