剑指offer-4-面试19:二叉树的镜像
2016-07-07 10:29
274 查看
题目
分析
测试用例代码
本题考点
二叉树结点的定义如下:
仔细观察可以发现,这两棵树的根节点相同,但它们的左右两个子节点交换了位置
(2)特殊输入测试(二叉树的根节点为NULL指针)
(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)考察应聘者的思维能力。树的镜像是一个抽象的概念,应聘者需要在短时间内想清楚求镜像的步骤并转化为代码。应聘者可以画图把抽象的问题形象化,这有助于其快速找到解题思路。
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 虚拟化基础架构Windows 2008篇之6-启动Windows部署服务
- 微软镜像下载
- 简述SQL Server 2005数据库镜像相关知识
- SQL Server 2005 镜像构建手册(sql2005数据库同步镜像方案)
- SQL Server误区30日谈 第7天 一个实例多个镜像和日志传送延迟
- SQL Server中避免触发镜像SUSPEND的N种方法
- SQLServer 镜像功能完全实现
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- 图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
- 使用RSYNC在服务器间镜像或者备份目录和文件
- C#非递归先序遍历二叉树实例
- C++将二叉树转为双向链表及判断两个链表是否相交
- C++非递归建立二叉树实例