[leetcode]112_路径总和_判断是否存在

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。
判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
示例 2:
输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。
示例 3:
输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。提示:
树中节点的数目在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000

解题思路:【DFS + 回溯】

1、Python输入[5,4,8,11,null,13,4,7,2,null,null,null,1]无法直接表达

可替换为[5,4,8,11,None,13,4,7,2,None,None,None,1]

2、根据层序遍历构建二叉树

3、DFS

DFS:前序遍历;中-左-右将路径节点、targetSum作为参数传入DFS函数处理中节点:当路径节点总和 == targetSum 且当前节点为叶子节点时,找到路径处理左节点:DFS遍历左节点处理右节点:DFS遍历右节点

class TreeNode:def __init__(self, val, left=None, right=None):self.val = valself.left = leftself.right = right
class Solution:def build_tree(self, levelorder=[]):length = len(levelorder)if length == 0:return Noneroot = TreeNode(levelorder[0])queue = [root]i = 1while queue and i < length:node = queue.pop(0)if levelorder[i] != None:node.left = TreeNode(levelorder[i])queue.append(node.left)i += 1if i < length and levelorder[i] != None:node.right = TreeNode(levelorder[i])queue.append(node.right)i += 1return rootdef dfs(self,root, targetSum, res, tmpSum):#   树为空,直接返回Falseif not root:res[0] = False#   找到叶子节点,且路径和 = targetSumif sum(tmpSum) == targetSum and not root.left and not root.right:res[0] = Trueif root.left:self.dfs(root.left, targetSum, res, tmpSum + [root.left.val])if root.right:self.dfs(root.right, targetSum, res, tmpSum + [root.right.val])if __name__ == '__main__':try:nums = eval(input())solution =Solution()root = solution.build_tree(nums)targetSum = int(input())res = [False]if root == None:print(False)else:solution.dfs(root, targetSum, res, [root.val])print(res[0])except Exception as e:print(e)

其他思路:【BFS】

BFS:使用队列保存每个节点路径和若存在一个节点恰好是叶子节点,且路径和 = targetSum,找到路径

    def bfs(self, root, res, targetSum):if not root:return res[0]queue = [(root, root.val)]while queue:node, path = queue.pop(0)if not node.left and not node.right and path == targetSum:res[0] = Truereturn res[0]    #   找到即返回,减少遍历次数if node.left:queue.append((node.left, path + node.left.val))if node.right:queue.append((node.right, path + node.right.val))return res[0]

仅作为代码记录,方便自学自查自纠

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

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

相关文章

redis哨兵启动出现 +sdown master mymaster 192.168.x.x

场景&#xff1a; 搭建好哨兵之后&#xff0c;哨兵一启动&#xff0c;过了30秒就会判断master sdown&#xff0c;但是检查配置是没有问题。 日志&#xff1a; Redis-master启动日志&#xff1a;没看到任何异常&#xff0c;所以master无异常 Redis-哨兵启动日志&#xff1a; …

(已解决)vscode如何传入argparse参数来调试/运行python程序

文章目录 前言调试传入参数运行传入参数延申 前言 以前&#xff0c;我都是用Pycharm专业版的&#xff0c;由于其好像在外网的时候&#xff0c;不能够通过VPN来连接内网服务器&#xff0c;我就改用了vscode。改用了之后&#xff0c;遇到一个问题&#xff0c;调试或者运行python…

常见服务端口号和中文大全

ServiceChinesePortExplainFTP文件传输协议20数据FTP文件传输协议21连接SSH安全外壳协议22SMTP简单邮件传输协议25DNS域名解析协议53DHCP动态主机配置协议67服务端DHCP动态主机配置协议68客户端HTTP超文本传输协议80Kerberos网络认证协议88POP3邮局协议110RPC远程过程调用111IM…

QT编译之后的debug包下运行程序双击运行出现无法定位程序输入点__gxx_personlity_seh0于动态链接库

1.出现这个错误的原因是&#xff1a; 缺少如下文件&#xff1a; 2.解决方法&#xff1a; 在运行程序.exe所在的目录执行&#xff1a;windeployqt untitled.exe&#xff08;指打包的运行程序&#xff09; 3.如果执行提示由于找不到qt5core.dll,无法继续执行代码和无法识别win…

MATLAB与Docker Compose:实现微服务API文档的自动化部署与Vue.js集成

在微服务架构中&#xff0c;服务之间的通信和协作是构建复杂应用的关键。随着服务数量的增加&#xff0c;管理和维护这些服务的API文档变得尤为重要。MATLAB作为一个强大的数学计算和可视化工具&#xff0c;其在微服务API文档的自动化部署中扮演着重要角色。本文将详细介绍如何…

pgvector docker版安装;稀疏向量使用;psycopg2 python连接使用

参看: https://cloud.tencent.com/developer/article/2359831 https://hub.docker.com/r/pgvector/pgvector/tags https://github.com/pgvector/pgvector 一、安装 拉取0.7版本 docker pull pgvector/pgvector:0.7.4-pg16运行: docker run --name pgvector -v $(pwd)/dat…

linux StarRocks 安装

一、检查服务器是否支持avx2&#xff0c;如果执行命令显示空&#xff0c;则不支持&#xff0c;那么安装后无法启动BE cat /proc/cpuinfo |grep avx2我的支持显示如下&#xff1a; 二、安装 docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -p 9001:9000 --privilegedtrue…

随机掉落的项目足迹:Vue3 + wangEditor5富文本编辑器——toolbar.getConfig() 查看工具栏的默认配置

问题引入 小提示&#xff1a;问题引入是一个讲故事的废话环节&#xff0c;各位小伙伴可以直接跳到第二大点&#xff1a;问题解决 我的项目不需要在富文本编辑器中引入添加代码块的功能&#xff0c;于是我寻思在工具栏上把操作代码的菜单删一删 于是我来到官网文档工具栏配置 …

MyBatis 深层次 Map 自动嵌套:解锁数据映射新境界

在 Java 开发的征程中&#xff0c;MyBatis 以其强大的数据库映射功能而备受青睐。其中&#xff0c;深层次 Map 自动嵌套这一特性更是为开发者带来了诸多惊喜与便利。 前提&#xff1a;首先开启自动映射&#xff01; java和mysql命名规则不一样&#xff0c;每次在mybatis中起别…

动态规划part07

LC 198.打家劫舍 关键&#xff1a;dp[i]的含义是考虑下标i及之前&#xff0c;能偷的最多的钱是多少&#xff0c;那么对于下标i 有 两种情况&#xff0c;偷或不偷 &#xff0c; 这又依赖于前一个房间&#xff0c;和前前个房间是否被偷。若偷 i &#xff0c; 那么dp[i] dp[i-2]…

我的AI工具箱Tauri版-MicrosoftTTS文本转语音

本教程基于自研的AI工具箱Tauri版进行MicrosoftTTS文本转语音服务。 MicrosoftTTS文本转语音服务 是自研的AI工具箱Tauri版中的一款功能模块&#xff0c;专为实现高效的文本转语音操作而设计。通过集成微软TTS服务&#xff0c;用户可以将大量文本自动转换为自然流畅的语音文件…

9/24作业

1. 分文件编译 分什么要分文件编译&#xff1f; 防止主文件过大&#xff0c;不好修改&#xff0c;简化编译流程 1) 分那些文件 头文件&#xff1a;所有需要提前导入的库文件&#xff0c;函数声明 功能函数&#xff1a;所有功能函数的定义 主函数&#xff1a;main函数&…

828华为云征文|使用Flexus X实例集成ES搜索引擎

目录 一、应用场景 1.1 Flexus X实例概述 1.2 ES搜索引擎 二、安装相关服务 2.1 安装Elasticsearch7.17.0 2.2 安装kibana7.17.0 三、开通安全组规则 四、整体感受 4.1 Flexus X实例 4.2 使用感觉 一、应用场景 1.1 Flexus X实例概述 Flexus X实例是华为云推出的一款…

力扣最热一百题——最小覆盖子串

目录 题目链接&#xff1a;76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;滑动窗口 1. 初始化 2. 构建 mapT 3. 滑动窗口 4. checkT 方法 5. 返回结果 Java写法&#xff1a; 运行时间 C写法&#x…

Hbase日常运维

1 Hbase日常运维 1.1 监控Hbase运行状况 1.1.1 操作系统 1.1.1.1 IO 群集网络IO&#xff0c;磁盘IO&#xff0c;HDFS IO IO越大说明文件读写操作越多。当IO突然增加时&#xff0c;有可能&#xff1a;1.compact队列较大&#xff0c;集群正在进行大量压缩操作。 2.正在执行…

SkyWalking 简介

SkyWalking是什么 skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用 程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。它是一款优秀的 APM(Application Performance Manag…

LLM - 理解 多模态大语言模型(MLLM) 的 对齐微调(Alignment) 与相关技术 (五)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142354652 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 多模态大语言模型(MLLM) 系列: 理解 多模态大语言模型(MLLM) 的 发展(…

一步一步优化一套生成式语言模型系统

以下是这套生成式语言模型解决任务的流程图概述&#xff1a; #mermaid-svg-keXg8yGoCyObKDtu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-keXg8yGoCyObKDtu .error-icon{fill:#552222;}#mermaid-svg-keXg8yGoCyO…

微服务Docker相关指令

1、拉取容器到镜像仓库 docker pull xxx //拉取指令到 镜像仓库 例如 docker pull mysql 、docker pull nginx docker images //查看镜像仓库 2、删除资源 2.1、删除镜像仓库中的资源 docker rmi mysql:latest //删除方式一&#xff1a;格式 docker rmi 要…

解决跨域问题的方法

在前端开发中&#xff0c;跨域问题是一个常见且需要解决的技术难题。跨域问题主要是指浏览器出于安全考虑&#xff0c;限制了来自不同源&#xff08;协议、域名、端口三者之一不同&#xff09;的资源访问。以下是一些常用的前端跨域解决方案&#xff1a; 1. CORS&#xff08;跨…