目录
一、问题描述
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
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]
二、思路
这道算法题我们采用递归的思想。
整体思路是递归原本的树,然后镜像地将递归结果放在新树上。
递归的思想,我们只需要将第一步搞懂即可。
第一步是什么呢?
那就是先创建根结点,
再将源树根结点的左子树挂在新树根结点的右子树上,
再将源树根结点的右子树挂在新树根结点的左子树上。
具体过程如下:
1.初始化当前结点(根结点),并且赋值
2.递归原来树的右子树,并将该结果挂到当前结点的左子树上
3.递归原来树的左子树,并将该结果挂到当前结点的右子树上
递归结束条件:
结点root为nullptr时,说明已经到叶子结点,递归结束。
三、举例
假设有一棵树如下:
第一步:初始化
第二步:将根结点赋给新树根结点
第三步,递归源树的右子树,并将结果赋给新树的左子树
第四步:重复上述操作,直至遍历完成
四、代码
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if(root == nullptr)
{
return nullptr;
}
TreeNode* newRoot = (TreeNode*)malloc(sizeof(TreeNode));
newRoot->val = root->val;
newRoot->left = mirrorTree(root->right);
newRoot->right = mirrorTree(root->left);
return newRoot;
}
};