class Solution {
public:
bool isSubtree(TreeNode* root, TreeNode* subRoot) {
if(root==NULL||subRoot==NULL)
return false;
if(root->val!=subRoot->val){
return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}else{
// return judge(root,subRoot);
return judge(root,subRoot)||isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot); // 这是为了应对出现有重复元素出现的情况,比如root: 1 1, subroot:1
}
return false;
}
bool judge(TreeNode* root1, TreeNode* root2){
// 这是用来判断子树的
if(root1==NULL&&root2==NULL) // 两个都为空,说明比对完了,返回true
return true;
if(root1==NULL||root2==NULL) // 其中一个为空,说明一个比完,一个还有,返回false
return false;
// 如果是判断子结构的就用下面这种方式
// if(root2==NULL)
// return true;
// if(root1==NULL) // 此时肯定root2不为null,root1为null,所以false;
// return false;
if(root1->val!=root2->val)
return false;
else
return judge(root1->left,root2->left)&&judge(root1->right, root2->right);
}
};