题目:输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。二叉树结点的定义如下:
struct binaryTreeNode
{
int m_nValue;
binaryTreeNode * m_pLeft;
binaryTreeNode * m_pRight;
};
bool doesTree1hasTree2( binaryTreeNode * pRoot1, binaryTreeNode * pRoot2 )
{
if( NULL == pRoot2 ) return true;
if( NULL == pRoot1 ) return false;
if( pRoot1->m_nValue == pRoot2->m_nValue )
{
return doesTree1hasTree2( pRoot1->m_pLeft, pRoot2->m_pLeft ) && doesTree1hasTree2( pRoot1->m_pRight, pRoot2->m_pRight );
}
else
{
return false;
}
}
bool hasSubTree( binaryTreeNode * pRoot1, binaryTreeNode * pRoot2 )
{
bool result = false;
if( NULL != pRoot1 && NULL != pRoot2 )
{
result = doesTree1hasTree2( pRoot1, pRoot2 );
if( !result )
result = hasSubTree( pRoot1->m_pLeft, pRoot2 );
if( !result )
result = hasSubTree( pRoot1->m_pRight, pRoot2 );
}
return result;
}