1. 题目描述

翻转一棵二叉树。

示例:

输入:

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

输出:

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

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

2. 解题思路

通过翻转之后,二叉树的每一个左右子孩子都发生了交换,所有我们可以使用帝归来实现:遍历每一个结点,并将每一个结点的左右孩子进行交换。

3. 代码实现

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @return {TreeNode}
  11. */
  12. var invertTree = function(root) {
  13. if(!root){
  14. return root
  15. }
  16. // 递归获取左右子结点
  17. let right = invertTree(root.right)
  18. let left = invertTree(root.left)
  19. // 交换左右子结点
  20. root.right = left
  21. root.left =right
  22. return root
  23. };

4. 提交结果

226. 翻转二叉树 - 图1