题目链接:
力扣https://leetcode.cn/problems/subtree-of-another-tree/
解题思路:
1. 二叉树 tree
的一棵子树包括 tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
注意是所有的后代
2. 自定义一个判断俩个子树是否相同的函数
代码实现:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//首先自定义一个判断俩个子树是否相同的函数
bool SameTree(struct TreeNode *root1,struct TreeNode *root2)
{
if (root1 == NULL && root2 == NULL)
{
return true;
}
if(root1 == NULL || root2 == NULL)
{
return false;
}
if(root1->val != root2->val)
{
return false;
}
return SameTree(root1->left,root2->left)&&SameTree(root1->right,root2->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
if(subRoot == NULL)
{
return true;
}
if(root == NULL)
{
return false;
}
if(SameTree(root,subRoot))
{
return true;
}
//遍历加判断
return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);//注意这里是||
/*注意这里的subRoot不需要->
因为相对而言root需要 ->left 是因为它是程序通过查看二叉树的左子树(不查看右子树)中是否含有题目要求的子树
这也解释了使用 || 而不是使用 && 的原因
因为无论左子树还是右子树中只要找到题目中要求的子树,均正确*/
}