判斷2棵二叉樹是否相等

本文轉自: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;
}

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