力扣每日练习(3.15)补

112. 路径总和

解题思路:遍历出每条路径,使得总和为目标值。如果找到了,就是1.否则为0.
如果遍历到了叶节点,就计算是否达到了目标值;
如果没有遍历到叶节点,就继续往左右子树遍历。

def hasPathSum(root: TreeNode, targetSum: int) -> bool:if not root:# 当前节点为空,返回Falsereturn False# 更新目标和targetSum -= root.val# 如果当前节点是叶子节点,检查目标和是否为0if not root.left and not root.right:return targetSum == 0# 递归检查左右子树return hasPathSum(root.left, targetSum) or hasPathSum(root.right, targetSum)

113. 路径总和 II

上一题的进阶,要求记录每条成功路径的具体路径
也就是要新增一个结果list存储所有成功的路径列表,还有每条路径的path。

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef pathSum(root: TreeNode, targetSum: int) -> List[List[int]]:def dfs(node, currentSum, path):if not node:returncurrentSum += node.valpath.append(node.val)# 检查是否是叶子节点且当前路径和等于目标和if not node.left and not node.right and currentSum == targetSum:# 注意这里需要添加path的副本result.append(path[:])# 递归遍历左右子树dfs(node.left, currentSum, path)dfs(node.right, currentSum, path)# 回溯,从路径中移除当前节点path.pop()result = []dfs(root, 0, [])return result

ai的理解:

想象你在一个迷宫里寻找宝藏,这个迷宫就像是我们的二叉树,宝藏是位于叶子节点的目标和targetSum。你手里有一张纸(这就是我们的path列表),每当你向前走一步,就在纸上记下你的当前位置。当你到达一个死路(叶子节点)但没有找到宝藏时,你会退回到上一个岔路口,并在纸上擦掉最后的记录。
现在,我们按照这个思路来解释代码的执行过程: 开始探索:你从迷宫的入口(根节点)开始,手里的纸是空的。
记录每一步:每向前走一步,就在纸上记录下当前的位置(每深入一层递归,就把当前节点的值加到path列表中)。
检查是否找到宝藏:每当你到达一个死路(叶子节点),你检查一下手里的纸(当前路径)上记录的所有步骤加起来是否等于宝藏的位置(targetSum)。如果是,你就把这张纸的副本(一条成功的路径)留在宝藏箱里(加入到result列表中)。
回退到上一个岔路口:不管这条路是否成功,每当探索完一条路径后,你都会回到上一个岔路口准备探索另一条路。这时,你就会在纸上擦掉最后的记录(执行path.pop()),因为你要撤销最后的这一步,回到之前的状态。
继续探索:回到岔路口后,如果还有没走过的路,你就按照同样的方式继续探索,直到探索完所有可能的路径。

101. 对称二叉树

最先想到的是利用层序遍历的思想,比较每一层是否对称,但是一看就不行。
正确的思路:同时递归遍历左子树和右子树,比较镜像节点。如果所有节点都满足条件,则就是对称的。

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef isSymmetric(root: TreeNode) -> bool:if not root:return Truedef isMirror(left: TreeNode, right: TreeNode) -> bool:if not left and not right:return Trueif not left or not right or left.val != right.val:return Falsereturn isMirror(left.left, right.right) and isMirror(left.right, right.left)return isMirror(root.left, root.right)

ai理解:

让我们一步一步梳理isMirror函数的逻辑,这个函数用于检查两个树节点是否是镜像对称的:

  1. 基本情况

    • 如果两个节点都为空,说明我们到达了树的末端,而且这一部分是对称的。因此,返回True
    • 如果一个节点为空而另一个不为空,或者两个节点都不为空但值不相等,说明这一部分不对称。因此,返回False
  2. 递归逻辑

    • 如果两个节点都不为空,并且它们的值相等,我们继续检查这两个节点的子节点。
      • 我们检查当前节点的左子节点与另一节点的右子节点是否对称(left.leftright.right)。
      • 同时,我们也检查当前节点的右子节点与另一节点的左子节点是否对称(left.rightright.left)。
    • 这个逻辑是基于对称树的性质:如果两个树是对称的,那么一棵树的左子树与另一棵树的右子树镜像对称,同时一棵树的右子树与另一棵树的左子树也镜像对称。
  3. 返回值

    • 我们通过逻辑与操作符(and)连接这两个递归调用的结果。只有当两个子树都是对称的(即left.leftright.right对称,且left.rightright.left对称),我们才认为整体是对称的,返回True
    • 如果任一对子树不对称,整体就不对称,返回False

通过这种方式,isMirror函数能够自顶向下递归地检查二叉树的每一层是否对称。这个过程中,每一次递归调用都是基于对称性的要求,逐步验证整棵树是否满足这一条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux: 动态库与静态库

静态库: .a后缀 动态库: .so后缀 当动静态库同时存在的时候, 默认优先使用动态库 1.1生成动静态库 Archive files 归档文件 r : replace c : create 命令: ar -rc lib库名.a mymath.o myprint.o //例如: ar -rc libhello.a mymath.o myprint.o Ma…

linux安装anconda

第一步: 下载anaconda 下载地址:(选择Linux版本的) https://repo.anaconda.com/archive/第二步: 把下载好的anaconda放到指定的路径 然后在该路径下(我是直接放属于我的根目录下) 输入以下命令…

axios 请求 url 地址,判断网络地址是否存在

使用 axios 来判断一个 URL 地址是否可连接,通常涉及到发送一个 HTTP 请求到这个地址,并检查响应的状态码。如果请求成功,并且返回了 200 OK 状态码,那么通常可以认为这个地址是可连接的。 以下是一个简单的示例,使用…

国创证券|资源再生概念持续活跃,超越科技两连板,大地海洋等走高

资源再生概念15日盘中再度走强,截至发稿,超越科技涨停斩获两连板,深水海纳涨超14%,大地海洋涨超12%,华新环保涨近9%,天奇股份、格林美、怡球资源等涨超5%。 消息面上,3月13日,国务院…

ElasticSearch架构设计

一、基础概念 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作: 一个分布式的实时文档…

油烟净化器:餐饮卫生环保检测的必备之选

我最近分析了餐饮市场的油烟净化器等产品报告,解决了餐饮业厨房油腻的难题,更加方便了在餐饮业和商业场所有需求的小伙伴们。 在如今日益关注卫生环保的时代背景下,油烟净化器成为餐饮业者必备的环保设备,不仅能够保持餐饮环境清…

【2024第一期CANN训练营】2、AscendCL概述

文章目录 【2024第一期CANN训练营】2、AscendCL概述1. AscendCL架构及基本概念1.1 什么是AscendCL?1.2 AscendCL的优势1.3 AscendCL应用场景1.4 基本概念 2. AscendCL接口调用流程2.1 流程概述2.2 详细步骤2.3 头文件和库文件 3. 准备开发和运行环境3.1 部署环境3.2…

文档解析应该获取哪些知识?

一、背景 随着人工智能和机器学习技术的发展,我们现在有能力从这些文档中提取更加丰富和深入的信息。无论是为了内容管理、知识发现还是数据分析,这些技术都为我们提供了强大的工具,以更有效地利用PDF文档中的知识。随着技术的不断进步&…

便携式气象站的工作原理

TH-BQX9便携式自动气象观测仪器是一种集成了多种传感器和自动化技术的气象监测设备,以其便携性、自动化和高精度等特点,广泛应用于气象、环保、农业、科研等领域。 首先,它的便携性是其最大的优势之一。设计紧凑、轻便易携,使得用…

Thinkphp+workman+redis实现多线程异步任务处理

前言 PHP本身并不直接支持多线程编程,因为PHP的设计初衷是作为一个脚本语言,主要面向的是Web开发。不过我们可以使用一些扩展和库来实现多线程的功能,比如workerman和swoole。通过多线程异步执行任务,可以大大提高代码的执行效率。…

【送书福利!第一期】《ARM汇编与逆向工程》

🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 😘《CTF专栏》超级详细的解析,宝宝级教学让你从蹒跚学步到健步如飞🙈 😎《大数据专栏》大数据从0到秃头👽&…

202212 CSP认证 | JPEG 解码

JPEG 解码 一道特别幸福简单的第三题…都不敢想象在考场上碰见这种题目会有多幸福。直接按照题目意思做就好了,感觉比第二题还简单…而且数组特别小完全没有超时压力 补充一个对小数处理的部分,包括本题涉及的四舍五入取整以及输出取整:C 实…

<sa8650>sa8650 partition-之-独立新增分区不加img

<sa8650>sa8650 partition-之-独立新增分区不加img 一、 前言二、准备条件三、添加新分区四、分区信息解析4.1 新增分区信息字段解析4.2 guid生成工具五、生成新的刷机文件六、替换刷机文件七、刷机验证八、总结九、参考文献<sa8650>sa8650 partition-之-非基线编译下新增分…

小迪安全42WEB攻防-通用漏洞文件包含LFIRFI伪协议

#知识点: 1、解释什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识: 1、本地包含LFI&远程包含RF1-区别 一个只能包含本地,一个可以远程加载 具体形成原因由代码和环境配置文件决定…

2024智慧农场系统微信小程序前端如何上传以及配置

2024智慧农场系统微信小程序前端如何上传以及配置 首先下载微信开发者工具 下载好以后打开,然后导入项目 前端修改:siteinfo.js 里面的域名信息 改完之后开始在微信开发者工具中开发工具中编译、上传、发布即可

【how2j练习题】HTML部分综合练习

练习题 1 <html><h1>英雄联盟 &#xff08;电子竞技类游戏&#xff09;</h1> <p> <strong>《英雄联盟》</strong>&#xff08;简称lol&#xff09;是由美国<i>Riot Games</i>开发&#xff0c;中国大陆地区由腾讯游戏运营的网络…

系统学习Python——装饰器:“私有“和“公有“属性案例-[在不同Python版本下的使用]

分类目录&#xff1a;《系统学习Python》总目录 对于通过名称显式调用的方法&#xff0c;文章《系统学习Python——装饰器&#xff1a;“私有“和“公有“属性案例-[使用伪私有、破坏私有和装饰器权衡]》中的示例在Python2.X和Python3.X下都能如期工作。然而和大多数软件一样&a…

软考78-上午题-【面向对象技术3-设计模式】-结构型设计模式01

一、适配器模式 1-1、意图 个类的接口转换成客户希望的另外一个接口。 Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 1-2、结构 适配器模式分为&#xff1a; 1、适配器类模式&#xff1b; 2、适配器对象模式 类适配器使用多重继承对一个接口与另…

时间序列中的离群值检测

时间序列中的离群值检测学习资料&#xff1a; Chapter 5 Outlier detection in Time series Anomaly Detection Techniques in Python A review on outlier/anomaly detection in time series data

goland设置保存文件时不将4个空格转为TAB

goland设置保存文件时不将4个空格转为TAB 版本&#xff1a;GoLand 2022.3 设置路径&#xff1a; Settings -> Editor -> Code Style -> Go -> Run gofmt图示&#xff1a;