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

1.题目 

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://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是否相同,

我们不能直接写

if(root->val==subRoot->val)

   return (isSameTree(root,subRoot));

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

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

if(root->val==subRoot->val)
{
    if(isSameTree(root,subRoot))
    {
          return true;
    }

}

root左右子树递归查看 

 3.代码实现

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);
}

将代码

if(root->val==subRoot->val)
{
    if(isSameTree(root,subRoot))
    {
          return true;
    }

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

可升华为

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

最终代码

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);
}

相关推荐

  1. Leetcode 572

    2024-04-22 00:10:01       22 阅读
  2. 力扣 572.

    2024-04-22 00:10:01       39 阅读
  3. leetcode 572.

    2024-04-22 00:10:01       46 阅读
  4. Leetcode 572

    2024-04-22 00:10:01       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 00:10:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 00:10:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 00:10:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 00:10:01       18 阅读

热门阅读

  1. OpenMP:变量作用域

    2024-04-22 00:10:01       12 阅读
  2. 代码随想录算法训练营day41

    2024-04-22 00:10:01       14 阅读
  3. Mysql优化

    2024-04-22 00:10:01       12 阅读
  4. spring的refresh

    2024-04-22 00:10:01       12 阅读
  5. 如何防止服务器被攻击

    2024-04-22 00:10:01       13 阅读
  6. CSS 预处理器

    2024-04-22 00:10:01       13 阅读
  7. CSS 伪元素和伪类的用法和区别

    2024-04-22 00:10:01       17 阅读