算法 二叉树 【剑指offer 27 镜像二叉树】

41 篇文章 1 订阅
4 篇文章 0 订阅

目录

一、问题描述

二、思路

三、举例

四、代码


一、问题描述

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

例如输入:

     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;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值