路径总和 III

题目链接

路径总和 III

题目描述


注意点

  • 二叉树的节点个数的范围是 [0,1000]
  • 求该二叉树里节点值之和等于 targetSum 的 路径 的数目

解答思路

  • 可根据前缀和的思路解决本题,前缀和表示从根节点开始,往左或往右组成的路径和,统计从根节点开始的所有的前缀和以及前缀和出现的次数,当遍历到任意一个节点时,可根据加上该节点值形成的当前值与目标值的差值(也就是currSum - targetSum)在前缀和中出现的次数推出加上该节点时路径和为targetSum的路径数
  • 因为路径方向必须是向下的(只能从父节点到子节点),所以父节点的前缀和只会影响其对应的左右子树,所以在前缀和映射中加上当前节点后递归其左右子树进行相同的操作,且在递归完左右子树后,需要将前缀和映射恢复,防止左右两个子树互相造成影响

代码

class Solution {public int pathSum(TreeNode root, int targetSum) {// key为前缀和的值,value为前缀和为key时的路径数量Map<Long, Integer> map = new HashMap<>();// 没有任何节点时前缀和为0,保证根节点为targetSum也能正确统计路径数map.put(0L, 1);return recursionPathSum(root, map, 0L, targetSum);}public int recursionPathSum(TreeNode root, Map<Long, Integer> map, Long currSum, int targetSum) {if (root == null) {return 0;}int res = 0;currSum += root.val;// 根据前一层的前缀和的值推出加上此节点时结果为targetSum的路径数res += map.getOrDefault(currSum - targetSum, 0);// 增加新的前缀和映射进入下一层对左右子树进行递归map.put(currSum, map.getOrDefault(currSum, 0) + 1);res += recursionPathSum(root.left, map, currSum, targetSum);res += recursionPathSum(root.right, map, currSum, targetSum);// 恢复状态,防止左右子树的前缀和各自产生影响map.put(currSum, map.get(currSum) - 1);return res;}
}

关键点

  • 前缀和的思想
  • 父节点的前缀和映射只会对其下方的子树判断路径总和有影响,而不会对同层或更高层的节点产生影响,所以在对子树递归后,还要将该节点的前缀和映射进行恢复

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

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

相关文章

大数据学习(1)-Hadoop

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…

用c动态数组(实现权重矩阵可视化)实现手撸神经网络230902

变量即内存、指针使用的架构原理: 1、用结构struct记录 网络架构,如 float*** ws 为权重矩阵的指针(指针地址); 2、用 = (float*)malloc (Num * sizeof(float)) 给 具体变量分配内存; 3、用 = (float**)malloc( Num* sizeof(float*) ) 给 指向 具体变量(一维数组)的…

Nginx支持SNI证书,已经ssl_server_name的使用

整理了一些网上的资料&#xff0c;这里记录一下&#xff0c;供大家参考 什么是SNI&#xff1f; 传统的应用场景中&#xff0c;一台服务器对应一个IP地址&#xff0c;一个域名&#xff0c;使用一张包含了域名信息的证书。随着云计算技术的普及&#xff0c;在云中的虚拟机有了一…

网络安全国家队-安防思考与实践

按照工信部“三同步”安全建设的统一要求&#xff0c;本项目的实施应具备符合等级保护要求的安全防护措施&#xff08;主要为传输控制、防火墙隔离、入侵检测、安全审计等网络安全措施&#xff1b;操作系统安全、数据库安全、防病毒管理、安全审计等基础系统安全措施&#xff0…

javascript二维数组(10)ajax的使用

在JQuery中&#xff0c;使用AJAX的方法主要有以下几种&#xff1a; $.ajax()&#xff1a;这是JQuery中最通用的AJAX请求方法。它需要一个包含各种参数的对象&#xff0c;其中包括请求的URL、请求方式、数据类型、请求参数等。请求成功后执行的回调函数也是通过参数来定义的。 …

怎么压缩图片?图片压缩技巧快学来

在数字时代&#xff0c;我们常常需要处理各种类型的文件&#xff0c;包括图片&#xff0c;然而&#xff0c;图片文件往往占用大量空间&#xff0c;尤其是在传输和存储时&#xff0c;为了解决这个问题&#xff0c;我们可以使用图片压缩工具来减小图片的体积&#xff0c;提高传输…

面试算法22:链表中环的入口节点(1)

题目 如果一个链表中包含环&#xff0c;那么应该如何找出环的入口节点&#xff1f;从链表的头节点开始顺着next指针方向进入环的第1个节点为环的入口节点。 例如&#xff0c;在如图4.3所示的链表中&#xff0c;环的入口节点是节点3。 分析 第1步&#xff1a;确认是否包含环…

java7 twr (try - with - resource)新特性

偶尔看到的一个关于 try()...catch() 的用法&#xff0c;通常我们使用 try...catch() 捕获异常的&#xff0c;如果遇到类似IO流的处理&#xff0c;要在finally部分关闭IO流&#xff0c;当然这个是JDK1.7之前的写法了&#xff1b; 在JDK7优化后的 try-with-resource 语句&#…

一次解决Pytorch训练时损失和参数出现Nan或者inf的经历

目前在做实验&#xff0c;参考了一个新的网络架构之后发现训练时损失出现Nan&#xff0c;参数了出现了inf的情况&#xff0c;先说说我的排查经历。 首先肯定是打印损失&#xff0c;损失是最容易出现Nan的&#xff0c;有各种原因&#xff0c;网上也有很多解决办法&#xff0c;我…

ES系列十二、ES的scroll Api及分页实例

1.官方api 1.Scroll概念 Version&#xff1a;6.1 英文原文地址&#xff1a;Scroll 当一个搜索请求返回单页结果时&#xff0c;可以使用 scroll API 检索体积大量&#xff08;甚至全部&#xff09;结果&#xff0c;这和在传统数据库中使用游标的方式非常相似。 不要把 scroll 用…

无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同

“/”应用程序中的服务器错误。 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动&#xff0c;并且客户端端口与服务器端口相同。如果服务器位于远程计算机上&#xff0c;请检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Se…

【算法设计与分析】— —实现活动安排问题的贪心算法。

&#x1f383;欢迎大家前去观看我的算法设计与分析专栏&#xff1a; 算法设计与分析_IT闫的博客-CSDN博客 希望对大家有所帮助&#xff01; &#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java…

接口测试常见问题

1.接口测试的流程 测试计划与方案 --> 接口用例设计 --> 接口测试执行 --> 缺陷报告与结果分析 2.接口工具的流程 脚本的设计&#xff0c;数据用例的设计&#xff0c;断言&#xff08;预期结果的设计&#xff09;&#xff0c;执行 3.测试计划与方案&#xff1a; …

sourceTree无法启动

前几天win10系统自动更新后&#xff0c;sourceTree就无法打开了&#xff0c;双击只是图标闪一下&#xff0c;电脑重启后还是无法打开。找到了网上几种方法进行尝试&#xff1a; 方法一&#xff1a;修改配置信息 在自己的电脑路径下&#xff1a; C:\Users\你的用户名\AppData…

每个.NET开发都应掌握的C#特性(Attribute)知识点

上篇文章讲述了C#反射知识点&#xff0c;本文将介绍C#特性&#xff08;Attribute&#xff09;的知识点。C#特性&#xff08;Attribute&#xff09;是一种强大的元数据机制&#xff0c;用于为代码元素&#xff08;如类、方法、属性等&#xff09;添加信息&#xff0c;以影响它们…

RFID系统简介:优点、应用与发展前景

一、介绍RFID系统 RFID系统全称是Radio Frequency Identification&#xff0c;是一种通过电磁场自动识别标记&#xff08;Tag或RFID标签&#xff09;并读取相关数据的技术。与条形码技术相比&#xff0c;RFID系统最大的特点就是可以自动识别、无须接触扫描&#xff0c;并且可以…

gin实现event stream

event stream是属于http的一种通信方式&#xff0c;可以实现服务器主动推送。原理于客户端请求服务器之后一直保持链接&#xff0c;服务端持续返回结果给客户端。相比较于websocket有如下区别&#xff1a; 基于http的通信方式&#xff0c;在各类框架的加持下不需要开发人员自己…

Explainability for Large Language Models: A Survey

本文是LLM系列文章&#xff0c;针对《Explainability for Large Language Models: A Survey》的翻译。 大型语言模型的可解释性:综述 摘要1 引言2 LLM的训练范式3 传统微调范式的解释4 提示范式的解释5 评估的解释6 研究挑战7 结论 摘要 大型语言模型(llm)在自然语言处理方面…

【Leetcode Sheet】Weekly Practice 10

Leetcode Test 123 买卖股票的最佳时机Ⅲ(10.3) 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 **注意&#xff1a;**你不能同时参与多笔交易&#xff08;你必须在再次购…