您的位置:首页 > 其它

二叉树的镜像

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);
}
}
其实就是一个广度遍历二叉树,只不过加了交换的动作。这里叶子结点没有给予特殊考虑,功能上不影响,也可以给一个判断,叶子结点不予考虑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: