/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool isSub(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot2==nullptr) return true;
if(pRoot1==nullptr) return false;
if(pRoot1->val==pRoot2->val)
return isSub(pRoot1->left,pRoot2->left )&& isSub(pRoot1->right,pRoot2->right);
else
return false;
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1==nullptr||pRoot2==nullptr)
return false;
if(pRoot1->val==pRoot2->val)//如果当前的两个结点相等的话 ,判断是不是1的子树;;
if( isSub( pRoot1, pRoot2))
{
return true;
}
else //否则的话 判断proot1的左右子树;是不是包含pRoot2;
{
if(HasSubtree(pRoot1->left,pRoot2))
return true;
if(HasSubtree(pRoot1->right,pRoot2))
return true;
}
return false ;
//return isSub(pRoot1,pRoot2)||HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
}
};
其实主函数可以写的更简单
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1==nullptr||pRoot2==nullptr)
return false;
return isSub(pRoot1,pRoot2)||HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
}