剑指offer-面试题.二叉树的镜像
2015-07-24 16:33
579 查看
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
二叉树节点定义如下:
本题可以参考http://www.cnblogs.com/vpoet/p/4660486.html(Leecode-Invert Binary Tree)[b]一文[/b]
实质是递归交换二叉树的左右节点。
比如
1.首先查看根节点与左右子节点是否为空,若为空则无需交换
2.先交换根节点的左右子节点。
3.再交换交换后的左子树的左右节点和右子树的左右节点
4.知道到达叶子节点,交换结束。
递归函数如下:
说明:注意结束条件,到达叶子结点结束
二叉树节点定义如下:
strcut BinaryTreeNode { int val; strcut BinaryTreeNode* m_pleft; strcut BinaryTreeNode* m_pright; }
本题可以参考http://www.cnblogs.com/vpoet/p/4660486.html(Leecode-Invert Binary Tree)[b]一文[/b]
实质是递归交换二叉树的左右节点。
比如
8 / \ 6 10 / \ / \ 5 7 9 11
1.首先查看根节点与左右子节点是否为空,若为空则无需交换
2.先交换根节点的左右子节点。
3.再交换交换后的左子树的左右节点和右子树的左右节点
4.知道到达叶子节点,交换结束。
递归函数如下:
void MirrorRecursively(BinaryTreeNode *pNode) { if(pNode==NULL) return NULL; if(pNode->m_pleft==NULL&&pNode->m_pright==NULL) return NULL; struct BinaryTreeNode *TempNode; TempNode=pNode->m_pleft; pNode->m_pleft=pNode->m_pright; pNode->m_pright=TempNode; if(pNode->m_pleft) { MirrorRecursively(pNode->m_pleft); } if(pNode->m_pright) { MirrorRecursively(pNode->m_pright); } }
说明:注意结束条件,到达叶子结点结束
if(pNode->m_pleft==NULL&&pNode->m_pright==NULL) 7 return NULL;
相关文章推荐
- 程序员,为什么千万不要重写代码?
- 一个微软面试题--关于位结构体
- 面试题:有限制几个全阵列
- 字符串——面试题1:统计一行字符中有多少个单词?
- 有关垃圾回收的面试题
- 剑指Offer面试题3(Java版):二维数组中的查找
- 转:码农成长记:那些年,前台小芳教会我的一些事
- 自学android半年,已从.net转型成android程序员,分享下这个过程
- 程序员风格的修真小说之炫小说
- Java程序员应该知道的10个面向对象理论
- java面试中注意的问题02
- 黑马程序员——Java集合之Collection
- [.Net码农]RDLC报表中使用自定义函数
- 黑马程序员—多线程
- 想成为PHP程序员正确的步骤
- 程序员几种不同的境界
- 【读书笔记】程序员的自我修养:链接、装载与库 第一章 温故而知新
- 美团前端面试小结
- 面试题整理
- 程序员的个人发展注意事项(转)