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