一刷劍指offer(19)——二叉樹的鏡像

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章