二叉树的镜像
来源:互联网 发布:供应商数据分析 编辑:程序博客网 时间:2024/05/19 17:58
/*
面试题19:二叉树的镜像
输入一个二叉树,输出它的镜像。
*/
解题思路:
先前序遍历树的每一个节点,如果遍历到的结点有子节点,就交换它的两个子节点。当交换完所有非叶子结点的左右子节点之后,就得到了树的镜像。
struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};BinaryTreeNode* Create(){ BinaryTreeNode *pRoot; int data; cin>>data; if(data ==0) { pRoot = NULL; } else { pRoot = new BinaryTreeNode; pRoot->m_nValue = data; pRoot->m_pLeft = Create( ); pRoot->m_pRight = Create( ); } return pRoot;}void PreOrder(BinaryTreeNode* pRoot){ if(pRoot) { cout<<pRoot->m_nValue <<" "; PreOrder(pRoot->m_pLeft ); PreOrder(pRoot->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 );}int main(){ BinaryTreeNode* pRoot = NULL; cout<<"The Tree is:"<<endl; pRoot= Create(); cout<<"先序遍历:"; PreOrder(pRoot); cout<<endl; MirrorRecursively(pRoot); cout<<"树的镜像先序遍历为:"<<endl; PreOrder(pRoot); cout<<endl;}
阅读全文
0 0
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- 二叉树的镜像
- Qt QStringList的简单使用方法
- macOS Windows 和 WindowController 教程
- java操作时间,将当前时间减一年,减一天,减一个月
- CF 453A(Little Pony and Expected Maximum-若干次掷骰,最大那次期望-推公式)
- 7622:求排列的逆序数 树状数组
- 二叉树的镜像
- JAVA学习笔记之(二)语言基础
- 使用Semaphore做并发个数控制
- C++ STL容器之 map
- react-native 打包apk 之 安卓离线包全过程
- 地区/递归分类
- MQTT Server搭建(apache-apollo)和MQtt Client搭建
- Android App 开发技能图谱
- redis 一些常规命令