LeetCode刷题实战572:另一棵树的子树
示例
![](https://filescdn.proginn.com/94aced0af4cd28a2c58dc83279e9dbfe/5155e5f35898f56a180f9f00709c9a63.webp)
![](https://filescdn.proginn.com/085152ab794dbcfa9fe0c3fc9368a0a4/5a303926abda9dd521e830f9a3ee1ce2.webp)
解题
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);
}
};