思路:先判断根,根相同再判断左右子树如果所有的都相同,则此树是另一个树的子树。
如果只有根相同,则向下继续找和跟相同的结点。再进行如上相同的操作。
bool HasSubTree(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2)
{
bool ret = false;
if(pRoot1 != NULL && pRoot2 != NULL)
{
if(pRoot1 -> value == pRoot2 -> value)
ret = DoTree1haveTree2(pRoot1,pRoot2);
if(!ret)
ret = HasSubTree(pRoot1 -> left,pRoot2);
if(!ret)
ret = HasSubTree(pRoot1 -> right,pRoot2);
}
return ret;
}
bool DoTree1haveTree2(pRoot1,pRoot2)
{
if(pRoot1 == NULL)
return false;
if(pRoot2 == NULL)
return true;
if(pRoot1 -> value != pRoot2 -> value)
return false;
return DoTree1haveTree2(pRoot1 -> left,pRoot2 -> left) && DoTree1haveTree2(pRoot1 -> right,pRoot2 -> right);
}