《剑指Offer》学习笔记--面试题19:二叉树的镜像
来源:互联网 发布:淘宝上传宝贝速度 编辑:程序博客网 时间:2024/05/21 20:39
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
二叉树结点的定义如下:
struct BinaryTreeNode{int m_nValue;BianryTreeNode* m_pLeft;BianryTreeNode* m_pRight;};树的镜像对很多人来说是一个新的概念,我们未必能够一下子想出求解树的镜像的方法。为了能够形成直观的印象,我们可以自己画一颗二叉树,然后根据照镜子的经验画出它的镜像。
求解一个树的镜像的过程是:我们先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。
代码如下:
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);}本题扩展:
上面的代码是用递归实现的,如果要求用循环实现,该如何实现?
void MirrorCycle(BinaryTreeNode* pNode){stack<BinaryTreeNode*> stack;//p是遍历指针BinaryTreeNode* p = pNode;//栈不空或者p不空时循环while(p || !stack.empty()){if(p != NULL){//存入栈中stack.push(p);//交换左右子树BinaryTreeNode* pTemp = p->m_pLeft;p->m_pLeft = p->m_pRight;p->m_pRight = pTemp;//遍历左子树p = p->lchild;}else{//退栈p = stack.top();stack.pop();//访问右子树p = p->rchild;}}//while}
0 0
- 《剑指Offer》学习笔记--面试题19:二叉树的镜像
- [剑指offer][面试题19]二叉树的镜像
- 【剑指offer】面试题19:二叉树的镜像
- 剑指offer 面试题19 二叉树的镜像
- 剑指Offer:面试题19 二叉树的镜像
- 《剑指Offer》面试题19:二叉树的镜像
- 剑指offer-面试题19:二叉树的镜像
- 剑指Offer----面试题19:二叉树的镜像
- 剑指offer面试题19:二叉树的镜像
- 剑指offer面试题19:二叉树的镜像
- 剑指offer面试题19:二叉树的镜像
- 剑指offer--面试题19:二叉树的镜像
- 剑指offer-面试题19-二叉树的镜像
- 【剑指offer】面试题19:二叉树的镜像
- 【面试题】剑指Offer-19-二叉树的镜像
- 剑指offer-面试题19-二叉树的镜像
- 剑指offer-面试题 19:二叉树的镜像
- 剑指offer 面试题19 二叉树的镜像
- Java-对象比较器
- android:descendantFocusability
- SessionFactory的用法
- 一些oracle等待事件
- 微信一路走来,风光背后的那些悲伤
- 《剑指Offer》学习笔记--面试题19:二叉树的镜像
- QQ协议分析(二)
- 猫猫学IOS(四十一)UI之核心动画 两行代码搞定3D转场(做android的哭死)
- 关于Android Sdk Manager更新下载慢或无法下载问题集合
- QQ 空间分享报-10001错误 解决
- 数组 字典 集合的区别
- 怎样自定义UITextField的placeholder
- Minimum SDK、Target SDK、Compile SDK作用
- Kinect 骨骼映射---Let me dance for U!