题目
请完成一个函数,输入一个二叉树,该函数输出它的镜像。如图,右边的二叉树就是左边的树的镜像。
思路
先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子结点的左右结点之后,就得到了树的镜像。如图:
代码
#include <iostream>
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
// 生成二叉树镜像
void MirrorRecursively (BinaryTreeNode *pNode)
{
// 如果结点为空,停止递归
if (pNode == nullptr)
return;
// 交换左右子树
std::swap(pNode->m_pLeft,pNode->m_pRight);
// 当左子树非空时,递归生成左子树镜像
if (pNode->m_pLeft)
MirrorRecursively(pNode->m_pLeft);
// 当右子树非空时,递归生成右子树镜像
if (pNode->m_pRight)
MirrorRecursively(pNode->m_pRight);
}
int main()
{
return EXIT_SUCCESS;
}