题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
时间限制:1秒 空间限制:32768K 热度指数:353429
思路
见代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool IsSubtree(TreeNode* pa, TreeNode* pb)
{
if(pb==NULL)
return true;
//pb为空说明已经到了树底
if(pa==NULL)
return false;
//pa为空,且pb非空
if(pa->val==pb->val)
//若当前值同,则判断左右子树是否相同
return IsSubtree(pa->left,pb->left)&&IsSubtree(pa->right,pb->right);
else return false;
}
bool HasSubtree(TreeNode* pa, TreeNode* pb)
{
if(pb==NULL||pa==NULL)// pa或者pb为空显然不成立
return false;
return IsSubtree(pa,pb)||HasSubtree(pa->left,pb)||HasSubtree(pa->right,pb);
//非空时,判断是否为子树,或者是否为pa的左子树和右子树的子树
}
};