🏆个人主页:企鹅不叫的博客
🌈专栏
⭐️ 博主码云gitee链接:代码仓库地址
⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!
💎一、题目
🏆1.题目描述
🏆2.原题链接
💎二、解题报告
🏆1.思路分析
🔑思路:
首先比较root,之后比较root的left和root的right,以此类推分治比较
🏆2.代码详解
bool samefree(struct TreeNode* A, struct TreeNode* B){
if(B == NULL) return true; //1
if(A == NULL) return false; //2
if(A->val != B->val) //3
{
return false;
}
return samefree(A->left, B->left) && samefree(A->right, B->right);//4
}
bool isSubStructure(struct TreeNode* A, struct TreeNode* B){
if(A == NULL) //5
{
return false;
}
if(B == NULL)
{
return false;
}
return samefree(A, B) //6
|| isSubStructure(A->left, B)
|| isSubStructure(A->right, B);
}
1.当第二个树为空时,说明两个数完全匹配上了,返回true
2.当第一个树为空时,说明第二个树不为空,但是第一个树为空了,返回false
3.此时两个节点节点都不为空,直接比较两者的值即可,不同返回false,否则继续分治
4.继续分治左右子树,只要有一个为false说明不匹配
5.日常判断两个是不是空
6.之后判断第一个树,第一个树的左子树和右子树是否和第二个树匹配