Leetcode 226.翻转二叉树


题目描述:

翻转一棵二叉树。

示例:

输入:

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

输出:

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

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

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

链接:

https://leetcode-cn.com/problems/invert-binary-tree


题目分析

  非常经典的递归问题。递归遍历二叉树并将它们的左右子树交换即可。

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == nullptr) return nullptr;
TreeNode *left = root->left;
TreeNode *right = root->right;
root->left = invertTree(right);
root->right = invertTree(left);
return root;
}
};

  时间复杂度:$O(n)$,其中 $n$ 是二叉树的结点数。我们对二叉树进行了一次遍历。
  空间复杂度:$O(n)$,其中 $n$ 是二叉树的结点数。取决于递归栈的深度,在最坏的情况下二叉树是一条链,深度会达到 $n$,最好情况下是平衡二叉树,深度为 $\log n$。