博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer-4-面试19:二叉树的镜像
阅读量:3564 次
发布时间:2019-05-20

本文共 869 字,大约阅读时间需要 2 分钟。

题目

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

二叉树结点的定义如下:

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

你可能感兴趣的文章
[LeetCode javaScript] 292. Nim游戏
查看>>
[LeetCode javaScript] 896. 单调数列
查看>>
[LeetCode javaScript] 804. 唯一摩尔斯密码词
查看>>
[LeetCode javaScript] 476. 数字的补数
查看>>
[LeetCode javaScript] 811. 子域名访问计数
查看>>
[LeetCode javaScript] 414. 第三大的数
查看>>
[LeetCode javaScript] 242. 有效的字母异位词
查看>>
[LeetCode javaScript] 75. 颜色分类
查看>>
[LeetCode javaScript] 56. 合并区间
查看>>
[LeetCode javaScript] 190. 颠倒二进制位
查看>>
[LeetCode javaScript] 521. 最长特殊序列 Ⅰ
查看>>
[LeetCode javaScript] 806. 写字符串需要的行数
查看>>
[LeetCode javaScript] 868. 二进制间距
查看>>
[LeetCode javaScript] 824. 山羊拉丁文
查看>>
[LeetCode javaScript] 463. 岛屿的周长
查看>>
[LeetCode javaScript] 107. 二叉树的层次遍历 II
查看>>
[LeetCode javaScript] 637. 二叉树的层平均值
查看>>
[LeetCode javaScript] 1. 两数之和
查看>>
[LeetCode javaScript] 14. 最长公共前缀
查看>>
[LeetCode javaScript] 26. 删除排序数组中的重复项
查看>>