思路: 递归
(1)先确定其实位置
(2)再比较左右子树是否相等
//比较左右子树是否相等
bool IsSameTree(TreeNode* root1,TreeNode* root2)
{
//root2==null说明整棵树都比较完了,说明所有点相同
if(root2==nullptr)
return true;
//root2非空,但root1为空,说明没有找到相同的点
if(root1==nullptr)
return false;
if(root1->val!=root2->val)
return false;
return IsSameTree(root1->left, root2->left)&&IsSameTree(root1->right,root2->right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1==nullptr||pRoot2==nullptr)
return false;
bool result=false;
if(pRoot1->val==pRoot2->val)
{
//找到起始位置
//判定以该点起始的两棵树是否相等
result=IsSameTree(pRoot1, pRoot2);
}
//result==False时,然后从该点的左右子树中查找
if(!result)
{
result=HasSubtree(pRoot1->left, pRoot2);
}
if(!result)
{
result=HasSubtree(pRoot1->right, pRoot2);
}
return result;
}