题目描述:请完成一个函数,输入一个二叉树,该函数输出他的镜像
这个函数主要使用的思想就是递归;
二叉树结点定义如下:
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode m_pLeft;
BinaryTreeNode m_pRight;
};
镜像的说明:
所以根据以上我们就差不多了解镜像的产生过程了,可以着手编写代码了:
void MirrorRecursively(BinaryTreeNode *pNode )
{
if(pNode==NULL||(pNode->m_pLeft==NULL&&pNode->m_pRight))//这个要求就是pNode!=NULL时且(pNode->m_pLeft==NULL&&pNode->m_pRight)为假时才会有镜像,否则返回,而对于(pNode->m_pLeft==NULL&&pNode->m_pRight)有三种情况为假:一二两种为:( pNode->m_pLeft!=NULL时,pNode->m_pRight==NULL或者m_pRight!=NULL )第三种为:pNode->m_pLeft==NULL,pNode->m_pRight!=NULL.总结起来就是根结点不能为NULL,左右结点至少有一个不能为NULL
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);
}