題目
完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像
二叉樹結點的定義如下:
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)考察應聘者的思維能力。樹的鏡像是一個抽象的概念,應聘者需要在短時間內想清楚求鏡像的步驟並轉化爲代碼。應聘者可以畫圖把抽象的問題形象化,這有助於其快速找到解題思路。