本文轉自:http://s.sousb.com/?p=414
題目:判斷兩顆二叉樹是否相等,注意:相等包含兩種:以下任意一種成立,root1和root2相等。
1.root1的左子樹與root2的左子樹相同並且root1的右子樹與root2的右子樹相同。
2.root1的左子樹與root2的右子樹相同並且root1的右子樹與root2的左子樹相同。
分析:按照上述兩種情況寫出遞歸即可,代碼如下:
bool IsBTreeEqual(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2)
{
if(NULL == pRoot1 && NULL == pRoot2)
return true;
else if(NULL == pRoot1 || NULL == pRoot2)
return false;
else
{
if(pRoot1->m_nValue != pRoot2->m_nValue)
return false;
bool leftEqual = IsBTreeEqual(pRoot1->m_pLeft,pRoot2->m_pLeft);
bool rightEqual = IsBTreeEqual(pRoot1->m_pRight,pRoot2->m_pRight);
if(leftEqual && rightEqual)
return true;
else
{
leftEqual = IsBTreeEqual(pRoot1->m_pLeft,pRoot2->m_pRight);
rightEqual = IsBTreeEqual(pRoot1->m_pRight,pRoot2->m_pLeft);
if(leftEqual && rightEqual)
return true;
else
return false;
}
}
}
題目:輸入一顆二叉樹根節點,複製該樹,返回新建樹的根節點。
分析:這一道題跟求二叉樹的高度類似,使用先序遍歷即可完成。參考代碼如下:
BinaryTreeNode* CopyTree(BinaryTreeNode* pRoot)
{
if(NULL == pRoot)
return NULL;
BinaryTreeNode* copyTreeNode = new BinaryTreeNode();
assert(NULL != copyTreeNode);
copyTreeNode->m_nValue = pRoot->m_nValue;
copyTreeNode->m_pLeft = CopyTree(pRoot->m_pLeft);
copyTreeNode->m_pRight = CopyTree(pRoot->m_pRight);
return copyTreeNode;
}