剑指offer-4-面试19:二叉树的镜像

本文介绍了如何实现二叉树的镜像操作。通过分析镜像的特性,提出通过交换二叉树节点的左右子节点来达到镜像效果。文章提供了功能测试用例和特殊输入测试用例,并指出此题主要考察对二叉树的理解和应聘者的抽象思维能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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

二叉树结点的定义如下:

struct BinaryTreeNode
{
    int m_nvalue;
    BinaryTreeNode* m_pLeft;
    BinaryTreeNode* m_pRight;
};

分析

树的镜像对很多人来说会是一个新的概念,未必一下子能够想出求树的镜像的方法。为了能够形成直观的印象,我们可以自己画一颗二叉树,然后根据照镜子的经验画出它的镜像。
这里写图片描述

仔细观察可以发现,这两棵树的根节点相同,但它们的左右两个子节点交换了位置
这里写图片描述

测试用例&代码

(1)功能测试(普通的二叉树,二叉树的所有结点都没有左子树或者右子树,只有一个结点的二叉树)

(2)特殊输入测试(二叉树的根节点为NULL指针)

void MirrorRecursively( BinaryTreeNode *pNode )
{
    if( pNode == NULL)
        return ;
    if( pNode->m_pLeft == NULL && pNode->m_pRight == NULL )
        return;
    BinaryTreeNode *pTemp = pNode->m_pLeft;
    pNode->m_pLeft = pNode->m_pRight;
    pNode->m_pRight = pTemp;

    if( pNode->m_pLeft )
        MirrorRecursively( pNode->m_pLeft );
    if( pNode->m_pRight )
        MirrorRecursively( pNode->m_pRight );
}

本题考点

(1)考察对二叉树的理解。本题实质上是利用树的遍历算法解决问题

(2)考察应聘者的思维能力。树的镜像是一个抽象的概念,应聘者需要在短时间内想清楚求镜像的步骤并转化为代码。应聘者可以画图把抽象的问题形象化,这有助于其快速找到解题思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值