刷爆leetcode第十一期 0023~0025

简介: 刷爆leetcode第十一期 0023~0025

编号0023 相同的树


给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。


如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。


9c86b8a1c43d4395bed87c11119f2644.png


首先我们要来判断下它们的根是否相等


根相等的话是否它们的左子树相等


是否它们的右子树相等


一直到子树为空为止


大家仔细思考下这个思路对不对


接下来我们开始敲代码


首先我们想极端一点的情况


如果这个俩空指针


说明这里肯定不用判断了 返回ture就行


如果说有一个空指针 一个不为空指针的话 那么肯定是不相同的返回假就可以


接下来如果值相等 我们能判断它们相同嘛 显然不可以


所以说我们这里直接上两个不同 返回假


之后我们再判断它的左子树右子树


整体代码如下


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

e35ae63c946f4a538c2bb5589f35a4c8.png


编号0024 对称二叉树


这里和前面相同的数的思路差不多


都是判断极值条件


之后递归展开 这里直接上代码 代码中会写明解题思路


bool _isSymmetric(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 _isSymmetric(root1->left,root2->right)
    && _isSymmetric(root1->right,root2->left);
}
bool isSymmetric(struct TreeNode* root)
{
    // 这里首先判断节点是否为空 空肯定是对称的
    if(root == NULL)
    {
        return true;
    }
    //之后这里要转换成左右子树的对称问题了 我们需要新建一个函数来写
    return _isSymmetric(root->left,root->right);
}


这里我们要注意的是 要转换成两个子树问题才可以做


而子树问题需要再创建一个递归函数 可能是这一题的难点之一


还有一个难点就是要观察结构


编号0025 另一个树的子树


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


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


来源:力扣(LeetCode)

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

3e0fc5efc15d4fe48f0b38ba1cea56c1.png


我们这里只需要遍历一遍root 并且将root中的每一个节点和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);
}


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
3月前
|
人工智能 数据可视化 BI
【2025】项目管理API集成工具指南:提升协作效率的17个必备模块
项目管理API集成工具通过连接不同平台,实现数据自动同步与流程自动化,提升团队协作效率。它支持跨系统操作,如任务同步、文档生成及可视化报表,减少人为错误,增强信息流通。随着技术发展,这类工具在企业数字化转型中扮演关键角色。
261 0
|
12月前
|
算法
递归和迭代详解
递归和迭代详解
383 1
|
Ubuntu 应用服务中间件 开发工具
Ubuntu16.04搭建gitlab服务器,搭建pip源服务器(两种方式),搭建apt源服务器
这篇文章是关于如何在Ubuntu 16.04系统上搭建GitLab服务器、pip源服务器(使用pypiserver和NGINX两种方式),以及apt源服务器的详细教程。
198 0
Ubuntu16.04搭建gitlab服务器,搭建pip源服务器(两种方式),搭建apt源服务器
|
机器学习/深度学习
【阿旭机器学习实战】【21】通过SVM分类与回归实战案例,对比支持向量机(SVM)3种SVM不同核函数
【阿旭机器学习实战】【21】通过SVM分类与回归实战案例,对比支持向量机(SVM)3种SVM不同核函数
【阿旭机器学习实战】【21】通过SVM分类与回归实战案例,对比支持向量机(SVM)3种SVM不同核函数
|
NoSQL 测试技术 定位技术
【MongoDB 专栏】MongoDB 的地理空间索引与位置查询
【5月更文挑战第10天】MongoDB 支持地理空间数据处理,提供2dsphere(球面)和2d(平面)索引,适用于地图导航、物流、社交网络等领域。通过创建索引,可加速位置查询,如查询范围、最近邻及地理空间聚合。案例包括地图应用、物流追踪和社交网络。注意数据准确性、索引优化和性能测试,以发挥其在地理空间处理中的潜力。学习此功能,为应用开发解锁更多可能性!
556 2
【MongoDB 专栏】MongoDB 的地理空间索引与位置查询
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
276 10
|
自然语言处理 开发者
《黑神话:悟空》的剧情脚本与对话系统设计
【8月更文第26天】在《黑神话:悟空》这款游戏中,引人入胜的故事情节和丰富多样的对话系统是吸引玩家的关键因素之一。本文将详细介绍游戏剧情脚本的编写过程以及交互式对话系统的实现技术。
591 0
|
机器学习/深度学习 编解码 Unix
超分数据集概述和超分经典网络模型总结
超分数据集概述和超分经典网络模型总结
526 1
|
并行计算 Java API
Java List集合取交集的八种不同实现方式
Java List集合取交集的八种不同实现方式