【路飞】算法与数据结构-翻转二叉树

139 阅读1分钟

LeetCode:地址

题目要求

翻转一棵二叉树。

示例 1:

输入:

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

输出:


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

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

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

思路

使用递归,其实是后序遍历(自底向上),先翻转左右子树,再将子树换个位置

也是一个分治问题: 分:获取左右子树 解:递归的翻转左右子树 合:将翻转后的左右子树换个位置放到根节点上

代码
var invertTree = function(root) {
    if(!root) { return null; }
    return {
        val: root.val,
        left: invertTree(root.right),
        right: invertTree(root.left)
    }
};