LeetCode笔记:翻转二叉树

问题

翻转一棵二叉树。

示例:

输入:

//翻转前
     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

//翻转后
     4
   /   \
  7     2
 / \   / \
9   6 3   1

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

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

解法

思路:

递归所有的左右两边的子树,交换左右子树

代码:

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var invertTree = function (root) {
  // 没有子树了
  if (root == null) return null;

  // 交换两边子树
  const treeNode = root.left;
  root.left = root.right;
  root.right = treeNode;

  // 递归设置两边的子树
  invertTree(root.left);
  invertTree(root.right);

  return root;
};

参考

评论