/**
* 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(q==NULL && p==NULL)
return true;
//不相等条件
if(q==NULL || p==NULL)
return false;
//不相等条件
if(q->val != p->val)
return false;
return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
//遍历树
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
if(root == NULL)
return false;
//遍历
bool ret1 = isSubtree(root->left,subRoot);
bool ret2 = isSubtree(root->right,subRoot);
//对比
bool ret = isSameTree(root,subRoot);
return ret || ret1 || ret2;
}
isSameTree
函数通过递归比较两棵树的根节点值,以及它们的左右子树是否相同。isSubtree
函数通过递归地在root
的左子树和右子树中查找subRoot
,并使用isSameTree
来检查当前节点root
是否与subRoot
相同。- 如果
subRoot
是空树,那么任何树root
都是它的子结构,因此isSubtree
直接返回true
。 - 如果
root
是空树,它不可能包含subRoot
作为子结构,因此isSubtree
返回false
。 isSubtree
函数返回true
,如果root
与subRoot
相同,或者root
的任何子树与subRoot
相同。
注意:isSubtree
函数的逻辑确保了如果 subRoot
是 root
的子树,或者 root
的任何子树包含 subRoot
,那么函数将返回 true
。