題目:
請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。
二叉樹結點定義如下:
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==NULL))
return;
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_Right)
MirrorRecursively(pNode->m_pRight);
}