问题重述:
题目:二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像;二叉树的定义如下:
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
思路解析:
我们先来看看镜像后的二叉树是什么样子的。如下:
如上图,右边是左边二叉树的镜像。
可以发现,所有节点的左右孩子的位置都发生了变化。所以我们可以从根节点开始,先将6和10的位置调换,再将11和9的位置调换,最后再将7和5的位置调换。
代码实现:
void MirrorBinTree(BinaryTreeNode* tree)
{
BinaryTreeNode* node = tree;
if (node != nullptr && (node->m_pLeft != nullptr || node->m_pRight != nullptr))
{
BinaryTreeNode* temp = node->m_pLeft;
node->m_pLeft = node->m_pRight;
node->m_pRight = temp;
}
if (node->m_pLeft)
MirrorBinTree(node->m_pLeft);
if (node->m_pRight)
MirrorBinTree(node->m_pRight);
}