思路:
1.这题可以简化成,求两个树是否相等,这个思路可以看以下链接:
2.递归遍历树,如果有根节点相同,就调用判断是否相同的函数就行比较
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if(p == NULL && q == NULL)//p,q都为空,代表相同
{
return true;
}
if(p == NULL || q == NULL)//p,q有一个为空,另一个不为空,那么肯定不相等
{
return false;
}
if(p->val != q->val)//p,q都不为空,但是他们对应的值不相等
{
return false;
}
return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
if(root==NULL)//判断是否为空,如果是空树,就返回false
{
return false;
}
//如果根节点相同,就调用isSameTree函数,判断是否相等
if(root->val == subRoot->val && isSameTree(root,subRoot))
{
return true;
}
return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
}