输入一棵二叉树,输出它的镜像。
二叉树定义如下所示:
struct BinaryTreeNode
{
int value;
BinaryTreeNode *pLeft;
BinaryTreeNode *pRight;
};
求一棵二叉树的镜像时,注意到根节点是相同的,然后它们的左右结点交换了位置,所以可以采用前序遍历的方法遍历这棵树的每个结点。如果遍历到的结点有左右结点,则交换它的两个左右结点。当交换完所有非叶子结点的左右子结点之后,即得到了树的镜像。代码实现如下所示:
void MirrorRecursively (BinaryTreeNode * pNode){
if(pNode == NULL || (pNode->pLeft == NULL && pNode->pRight == NULL ))
return;
BinaryTreeNode *temp = pNode->pLeft;
pNode->pLeft = pNode->pRight;
pNode->pRight = temp;
if(pNode->pLeft)
MirrorRecursively(pNode->Left);
if(pNode->pRight)
MirrorRecursively(pNode->pRight);
}