劍指offer-4-面試19:二叉樹的鏡像

題目

完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像

二叉樹結點的定義如下:

struct BinaryTreeNode
{
    int m_nvalue;
    BinaryTreeNode* m_pLeft;
    BinaryTreeNode* m_pRight;
};

分析

樹的鏡像對很多人來說會是一個新的概念,未必一下子能夠想出求樹的鏡像的方法。爲了能夠形成直觀的印象,我們可以自己畫一顆二叉樹,然後根據照鏡子的經驗畫出它的鏡像。
這裏寫圖片描述

仔細觀察可以發現,這兩棵樹的根節點相同,但它們的左右兩個子節點交換了位置
這裏寫圖片描述

測試用例&代碼

(1)功能測試(普通的二叉樹,二叉樹的所有結點都沒有左子樹或者右子樹,只有一個結點的二叉樹)

(2)特殊輸入測試(二叉樹的根節點爲NULL指針)

void MirrorRecursively( BinaryTreeNode *pNode )
{
    if( pNode == NULL)
        return ;
    if( 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_pRight )
        MirrorRecursively( pNode->m_pRight );
}

本題考點

(1)考察對二叉樹的理解。本題實質上是利用樹的遍歷算法解決問題

(2)考察應聘者的思維能力。樹的鏡像是一個抽象的概念,應聘者需要在短時間內想清楚求鏡像的步驟並轉化爲代碼。應聘者可以畫圖把抽象的問題形象化,這有助於其快速找到解題思路。

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