Leetcode 226. 翻转二叉树

题目描述

翻转一棵二叉树。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

输入:

4
/ \
2 7
/ \ / \
1 3 6 9
输出:

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

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

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

解题思路

运用递归的思想,先将左子树和右子数递归翻转,然后将翻转后的左子树和右子树调换位置。递归出口就是根节点为空或者只有根节点的情况。

示例代码

1
2
3
4
5
6
7
8
9
10
TreeNode* invertTree(TreeNode* root) {
if(root==nullptr) return nullptr;
if(!root->left&&!root->right) return root;
TreeNode* left=invertTree(root->left);
TreeNode* right=invertTree(root->right);
TreeNode* temp=left;
root->left=root->right;
root->right=temp;
return root;
}