前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode——572—— 另一棵树的子树

LeetCode——572—— 另一棵树的子树

作者头像
小李很执着
发布2024-06-15 08:59:24
700
发布2024-06-15 08:59:24
举报
文章被收录于专栏:学习笔记学习笔记

1.题目

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。

https://leetcode.cn/problems/subtree-of-another-tree/

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

示例 1:

输入:root = [3,4,5,1,2], subRoot = [4,1,2] 输出:true 示例 2:

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2] 输出:false

提示:

root 树上的节点数量范围是 [1, 2000] subRoot 树上的节点数量范围是 [1, 1000] -104 <= root.val <= 104 -104 <= subRoot.val <= 104

2.解析

首先我们可以知道root为空时肯定不存在即返回false;

第二点我们可以套用LeetCode——100——相同的树的思路bool isSameTree判断是否相同;

我们可以考虑递归找root->val==subRoot->val时进行比较此时root和subRoot是否相同,

我们不能直接写

代码语言:javascript
复制
if(root->val==subRoot->val)

   return (isSameTree(root,subRoot));

但此时我们需要考虑以下这种情况

因此我们要改为限制条件 ,实现不断对比,查找是否存在 root 中是否包含和 subRoot 具有相同结构和节点值的子树;

代码语言:javascript
复制
if(root->val==subRoot->val)
{
    if(isSameTree(root,subRoot))
    {
          return true;
    }

}

root左右子树递归查看

3.代码实现

代码语言:javascript
复制
bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{
    if(p==NULL&&q==NULL)
    {
        return true;
    }
    if(p==NULL||q==NULL)
    {
        return false;
    }
    if(p->val!=q->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;
}
if(root->val==subRoot->val)
{
    if(isSameTree(root,subRoot))
    {
          return true;
    }

}
 return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}

将代码

代码语言:javascript
复制
if(root->val==subRoot->val)
{
    if(isSameTree(root,subRoot))
    {
          return true;
    }

}
 return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}

可升华为

代码语言:javascript
复制
return isSameTree(root,subRoot)||isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);

最终代码

代码语言:javascript
复制
bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{
    if(p==NULL&&q==NULL)
    {
        return true;
    }
    if(p==NULL||q==NULL)
    {
        return false;
    }
    if(p->val!=q->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;
}
 return isSameTree(root,subRoot)||isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.题目
  • 2.解析
  • 3.代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档