1. 题目来源
链接:
二叉树的镜像
来源:LeetCode——《剑指-Offer》专项
2. 题目说明
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
4
/ \
2 7
/ \ / \
1 3 6 9
镜像输出:
4
/ \
7 2
/ \ / \
9 6 3 1
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
限制:
-
0 <= 节点个数 <= 1000
3. 题目解析
方法一:递归+交换左右子树解法
得到镜像树其实就是把左右交换一下,主要思路如下:
-
首先判断根节点是否为空,若为空返回
nullptr
-
开辟一个节点
head
,给头结点
root
做一个备份 - 若根节点为叶子节点,返回根节点即可
- 若根节点不为叶子节点,借助辅助空间,交换该根节点的左右子树
- 若根节点左孩子不为空,则递归遍历左孩子
- 若根节点右孩子不为空,则递归遍历右孩子
-
返回
head
即可
思路如上,按着顺序写出代码即可。
参见代码如下:
// 执行用时 :4 ms, 在所有 C++ 提交中击败了71.97%的用户
// 内存消耗 :11 MB, 在所有 C++ 提交中击败了100.00%的用户
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (root == nullptr) return nullptr;
TreeNode* head = root;
if (root->left == nullptr && root->right == nullptr) return root;
TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
if (root->left) mirrorTree(root->left);
if (root->right) mirrorTree(root->right);
return head;
}
};
版权声明:本文为yl_puyu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。