求和路径00

news2025/7/8 18:18:15

题目链接

求和路径

题目描述

注意点

  • 节点总数 <= 10000
  • 节点的值可能是正数或负数
  • 路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)

解答思路

  • 因为要求树的路径和,所以初始想到的是深度优先遍历,如果暴力求每条路径的路径和,那么很多路径会重复计算,所以考虑使用前缀和
  • 使用map存储前缀和,其中key是前缀和,value是前缀和为preSum的数量,前缀和是从根节点到达任意一个节点的路径和(未到达根节点则前缀和为0,方便后续讨论从根节点出发的路径和)
  • 当到达任意一个节点node,此时从根节点root到达node的路径和为curr,以node作为路径末尾时路径和为sum的路径数量应该是map.getOrDefault(curr - sum, 0),解释为curr是root到node的路径和,curr - sum是root到node的某个父节点parent的路径和,此时parent的下一个节点与node之间的路径和就是sum,满足题意(具体有没有这个parent取决于map.get(curr - sum)是否为0
  • 当到达任意一个节点node,还要更新前缀和对应的map,也就是将curr + node.val存进map中,方便继续深搜遍历,在深搜完成后,要对前缀和进行回溯,否则node的同一层或者父节点进行深搜时会出错

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int res = 0;
    public int pathSum(TreeNode root, int sum) {
        Map<Integer, Integer> map = new HashMap<>();
        // 前缀和为0也就是从根节点出发的路径和
        map.put(0, 1);
        dfs(root, sum, 0, map);
        return res;
    }

    public void dfs(TreeNode node, int sum, int curr, Map<Integer, Integer> map) {
        if (node == null) {
            return;
        }
        curr += node.val;
        res += map.getOrDefault(curr - sum, 0);
        // 记录前缀和
        map.put(curr, map.getOrDefault(curr, 0) + 1);
        dfs(node.left, sum, curr, map);
        dfs(node.right, sum, curr, map);
        // 该节点的情况已讨论完,前缀和回溯
        map.put(curr, map.get(curr) - 1);
    }
}

关键点

  • 前缀和的思想
  • 初始map赋值map.put(0, 1),方便考虑从根节点出发的路径和为sum的情况
  • 在对某个节点求前缀和并对其左右子树深搜后,要进行回溯

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

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

相关文章

手写轮播列表(最新) 轮播图 swiper

el-row版本: <template><div class="container-div" id="app"><div><!-- 头部开始--><div class="top1"><div class="content"><div class="list"><el-row :gutter=&quo…

二级造价师精选基础知识题库(含答案)

一.单项选择题: 1.大中型建设工程项目立项批准后&#xff0c;在工程开工前&#xff0c;应当由( )按照有关规定申请领取施工许可证。A.建设单位 B.施工单位 C.总承包单位 D.监理单位 2.建设单位申领建筑工程施工许可证后&#xff0c;既不开工又不申请延期或者超过延期时限的&a…

MySql出现的问题

1.在控制面吧输入mysql显示不是内部命令 2.找到mysql安装的目录,复制目录路径 3.打开系统属性设置环境变量中的Path将路径添加到里面 4.添加好以后将控制面板重新打开输入命令 2.解决安装mysql错误 导致多个mysql服务删除教程 1.用管理员身份打开cmd命令板 2.在…

14,15-EET/DHET Hypertension ELISA Kit--Detroit RD

用于14,15-EET/DHET测量的DH2与用于14,15-DHET测量的DH1相同。与DH2相比&#xff0c;与DH1的唯一区别是样品制备步骤&#xff08;而不是Elisa试剂盒&#xff09;&#xff0c;其中EET被化学改为DHET。 货号&#xff1a;DH2 名称&#xff1a;14,15-EET/DHET Hypertension ELISA…

Flutter 简化线程Isolate的使用

文章目录 前言一、完整代码二、使用示例1、通过lambda启动线程2、获取线程返回值3、线程通信4、结束isolate 总结 前言 flutter的线程是数据独立的&#xff0c;每个线程一般通过sendport来传输数据&#xff0c;这样使得线程调用没那么方便&#xff0c;本文将提供一种支持lambd…

Linux系统安全(用户、密码、grub引导密码、增加终端)

目录 系统安全 用户安全 密码安全 PAM认证 命令的历史 用户切换 命令的执行权限 grub引导密码 增加终端 系统安全 用户安全 命令 说明 chattr i /etc/passwd chattr&#xff1a;为文件添加特殊权限 i&#xff1a;指定文件设为不可修改&#xff0c;只有root用户能为…

职称申报总是不通过的五大原因,竟然在这里

职称评审每年都是有人通过&#xff0c;有人不能通过&#xff0c;而且有的人每年申报&#xff0c;但还是不通过&#xff0c;不通过其实都是有原因&#xff0c;抛开运气&#xff0c;有的人确实运气不好&#xff0c;不通过&#xff0c;这种没办法&#xff0c;但是大部分人申报没有…

海外仓系统选择方法:中小型海外仓怎么选到合适的wms系统?

对于中小型海外仓来说&#xff0c;本身的预算有限&#xff0c;所以要怎么选择一个合适的海外仓管理系统&#xff0c;并不是一件简单的事情。 这确实是一个重大的决定&#xff0c;它直接关系到后面海外仓的运营效率。今天我们会系统的介绍一下&#xff0c;中小型海外仓选择海外…

Base64 编码详解

文章目录 Base64 编码详解base64是什么base64原理base64变种为什么要base64编码 Base64 编码详解 base64是什么 Base64编码&#xff0c;是由64个字符组成编码集&#xff1a;26个大写字母AZ&#xff0c;26个小写字母az&#xff0c;10个数字0~9&#xff0c;符号“”与符号“/”…

【乐吾乐2D可视化组态编辑器】开关、阀门、报警状态切换

开关状态 开关的断开与闭合&#xff1a;将电力组件的“开”与“关”2个组件重叠在一起&#xff0c;右键选择“组合为状态”&#xff0c;属性面板中就可以任意切换状态。 视频教程&#xff1a;开关阀门多状态控制 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.co…

详解 Spring Security:全面保护 Java 应用程序的安全框架

详解 Spring Security&#xff1a;全面保护 Java 应用程序的安全框架 Spring Security 是一个功能强大且高度可定制的框架&#xff0c;用于保护基于 Java 的应用程序。它为身份验证、授权、防止跨站点请求伪造 (CSRF) 等安全需求提供了解决方案。下面将更详细地介绍 Spring Se…

盲盒App开发时有哪些技术框架可以借鉴

在开发盲盒App时&#xff0c;技术框架的选择对于应用的性能、稳定性和用户体验都至关重要。以下是几个可以借鉴的技术框架&#xff0c;它们在不同方面提供了优势&#xff0c;并且结合了参考文章中的相关信息&#xff1a; 前端技术框架 微信小程序框架&#xff1a; 优点&#…

关于2024年第一批计算机程序设计员(Python)四级、三级职业技能等级证书认证考试的通知

计算机程序设计员&#xff08;Python&#xff09;详细介绍 报名详细信息&#xff1a; 报名截止时间&#xff1a;2024年6月05日 ~ 2024年6月18日 准考证下载时间&#xff1a;2023年6月24日 ~ 6月28日 考试时间&#xff1a;2024年6月29日 四级&#xff1a;08:30~12:30&#…

2024年应用数学与建模国际学术会议 (ICAMM 2024)

2024年应用数学与建模国际学术会议 &#xff08;ICAMM 2024&#xff09; 2024 International Conference on Applied Mathematics and Modeling 【重要信息】 大会地点&#xff1a;上海 大会官网&#xff1a;http://www.icicamm.com 投稿邮箱&#xff1a;icicammsub-conf.com 【…

Java-01-基础篇 Java集合-01-Map

一&#xff0c;Map Map 是一个键值对的集合&#xff0c;它取代了 java.util.Dictionary 字典类&#xff1b;这个字典类是在 JDK1.0 提供的&#xff0c;Map集合是在 JDK1.2 提供的。 1.1 Map 接口分析 package java.util; /*** param <K> 键的类型* param <V> 值的…

『大模型笔记』主成分分析(PCA)解释:简化机器学习中的复杂数据!

主成分分析(PCA)解释:简化机器学习中的复杂数据 文章目录 一. 主成分分析(PCA)解释:简化机器学习中的复杂数据!二. 参考文献一. 主成分分析(PCA)解释:简化机器学习中的复杂数据! 主成分分析(Principal Component Analysis,简称PCA)通过 将大型数据集中的维度减少…

EC20通信模块升级失败 Quectel QDLoader 9008

这里写自定义目录标题 usb驱动下载固件和升级软件下载开始升级上述过程升级失败&#xff0c;出现Quectel QDLoader 9008寻找解决方案&#xff0c;事了QPS t不行&#xff0c;最终使用这个Quectel_Customer_FW_Download_Tool软件解决下载链接&#xff1a; 所有下载驱动、固件、软…

基于梯度下降的多元线性回归原理

为了展示多元线性回归的迭代过程&#xff0c;我们可以使用梯度下降算法手动实现多元线性回归。梯度下降是一种迭代优化算法&#xff0c;用于最小化损失函数。 我们将以下步骤进行手动实现&#xff1a; 初始化回归系数。计算预测值和损失函数。计算梯度。更新回归系数。重复步…

机器学习python实践——数据“相关性“的一些补充性个人思考

在上一篇“数据白化”的文章中&#xff0c;说到了数据“相关性”的概念&#xff0c;但是在统计学中&#xff0c;不仅存在“相关性”还存在“独立性”等等&#xff0c;所以&#xff0c;本文主要对数据“相关性”进行一些补充。当然&#xff0c;如果这篇文章还能入得了各位“看官…

MPT(merkle Patricia trie )及理解solidity里的storage

what&#xff1f; MPT树是一种数据结构&#xff0c;用于在以太坊区块链中高效地存储和检索账户状态、交易历史和其他重要数据。MPT树的设计旨在结合Merkle树和Patricia树的优点&#xff0c;以提供高效的数据存储和验证 MPT树由四种类型的节点组成&#xff1a; **扩展节点&…