题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
class Solution {
public:
bool judge(TreeNode* a,TreeNode* b){
if(b==NULL)
return true;
if(a!=NULL&&b!=NULL&&a->val==b->val)
return judge(a->left,b->left)&&judge(a->right,b->right);
return false;
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(!pRoot1||!pRoot2)
return false;
bool ret=judge(pRoot1,pRoot2);
if(ret)
return true;
return HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
}
};
变种:如果是判断B是不是A的子树:
class Solution {
public:
bool judge(TreeNode* a,TreeNode* b){
if(a==NULL&&b==NULL) //这里都是空返回true
return true;
if(a!=NULL&&b!=NULL&&a->val==b->val)
return judge(a->left,b->left)&&judge(a->right,b->right);
return false;
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(!pRoot1||!pRoot2)
return false;
bool ret=judge(pRoot1,pRoot2);
if(ret)
return true;
return HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
}
};