二叉树的镜像
2016-05-18 15:15
169 查看
//请完成一个函数,输入一个二叉树,该函数输出它的镜像
#include "stdlib.h"
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* n_pRight;
};
void MirrorRecursively(BinaryTreeNode *pNode)
{
if (pNode == NULL)
return;
BinaryTreeNode* left = pNode->m_pLeft;
BinaryTreeNode* right = pNode->n_pRight;
pNode->m_pLeft = right;
pNode->n_pRight = left;
MirrorRecursively(left);
MirrorRecursively(right);
}
#include "deque"
void MirrorWithLoop(BinaryTreeNode* pNode)
{
if (pNode == NULL)
return;
std::deque<BinaryTreeNode*> node;
node.push_back(pNode);
while (!node.empty())
{
BinaryTreeNode* currentNode = node.front();
BinaryTreeNode* left = currentNode->m_pLeft;
BinaryTreeNode* right = currentNode->n_pRight;
currentNode->m_pLeft = right;
currentNode->n_pRight = left;
node.pop_front();
if (left != NULL)
node.push_back(left);
if (right != NULL)
node.push_back(right);
}
}
其实就是一个广度遍历二叉树,只不过加了交换的动作。这里叶子结点没有给予特殊考虑,功能上不影响,也可以给一个判断,叶子结点不予考虑。
#include "stdlib.h"
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* n_pRight;
};
void MirrorRecursively(BinaryTreeNode *pNode)
{
if (pNode == NULL)
return;
BinaryTreeNode* left = pNode->m_pLeft;
BinaryTreeNode* right = pNode->n_pRight;
pNode->m_pLeft = right;
pNode->n_pRight = left;
MirrorRecursively(left);
MirrorRecursively(right);
}
#include "deque"
void MirrorWithLoop(BinaryTreeNode* pNode)
{
if (pNode == NULL)
return;
std::deque<BinaryTreeNode*> node;
node.push_back(pNode);
while (!node.empty())
{
BinaryTreeNode* currentNode = node.front();
BinaryTreeNode* left = currentNode->m_pLeft;
BinaryTreeNode* right = currentNode->n_pRight;
currentNode->m_pLeft = right;
currentNode->n_pRight = left;
node.pop_front();
if (left != NULL)
node.push_back(left);
if (right != NULL)
node.push_back(right);
}
}
其实就是一个广度遍历二叉树,只不过加了交换的动作。这里叶子结点没有给予特殊考虑,功能上不影响,也可以给一个判断,叶子结点不予考虑。
相关文章推荐
- Android中帧动画
- C语言中内存分配
- poj 1379 Run Away
- 初学C和C++每日笔记 求个大神指点指路
- frame-faking-介绍-函数调用伪造
- ArrayList vs LinkedList vs Vector
- leetcode 之Partition List(16)
- 快速排序分析总结
- 搭建本地Git服务器(rhel+git+gitosis)
- 深入浅出话委托
- [置顶] 【EF系列】CodeFirst代码优先
- SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER
- 紫金桥组态软件和厦门四信DTU通讯原理及配置
- linux 磁盘挂载和卸载机制
- Jmeter常用函数
- 要让你的营销投入真正起作用?先思考这5大问题
- Java进阶学习第十九天——dbutils与案例
- ssh简介
- android adb命令
- c++学习进阶方向