路径总和 III

news2024/11/6 3:14:54

题目链接

路径总和 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.coloradmin.cn/o/1072555.html

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

相关文章

windows下在cmd和git bash中执行bash download.sh失败

cmd报错信息&#xff1a; 解决办法&#xff1a; win64-wget-1.21.4 安装软件wget&#xff0c;如下这是64位的包&#xff0c;解压后&#xff0c;下面有个wget.exe&#xff0c;拷贝到C:\Windows\System32、 然后打开cmd&#xff0c;执行wget -V 如上&#xff0c;有版本信息就O…

Java变量的声明和初始化,Java变量的作用域:静态变量、全局变量和局部变量

java 语言是强类型&#xff08;Strongly Typed&#xff09;语言&#xff0c;强类型包含以下两方面的含义&#xff1a; 所有的变量必须先声明、后使用。指定类型的变量只能接受类型与之匹配的值。 这意味着每个变量和每个表达式都有一个在编译时就确定的类型。类型限制了一个变…

2.springcloudalibaba项目搭建(基于alibaba2021.0.5.0版本)

文章目录 [TOC](文章目录) 前言一、项目配置1.1 pom配置1.2 nacos新建命名空间1.3 项目配置1.4 nacos上配置配置文件1.5 代码新增测试读取服务配置代码1.6 启动类增加注解 二、启动服务并测试2.1 启动服务&#xff0c;查看是否注册成功2.2 测试是否读取到了nacos上的配置 总结 …

嵌入式系统中的加密性能:第2部分

本系列的第1部分讨论了影响系统级密码性能的硬件和软件变量。现在&#xff0c;在第2部分中&#xff0c;我们将重点介绍两种用于测量高级后备加速器性能的方法&#xff1a;1&#xff09;驱动器级加速器测试以识别加速器或SoC内存带宽约束&#xff0c;以及2&#xff09;应用程序/…

什么是电商 API接口 以及电子商务网站为何使用它们

从技术上讲&#xff0c;API是应用程序编程接口的首字母缩写&#xff0c;被认为是构建应用软件的一组协议。实际上&#xff0c;API 是让人们保持数字联系的大部分基础。 从我们手机上的应用程序到复杂的飞行控制系统&#xff0c;API 将原本完全不同的系统组合在一起以创建单一…

睿趣科技:抖音店铺怎么取名受欢迎

抖音作为国内最大的短视频平台&#xff0c;其商业价值不容忽视。许多商家和创作者都在抖音上开设了自己的店铺&#xff0c;而一个富有创意和吸引力的店铺名字&#xff0c;往往能带来更多的客流量。那么&#xff0c;如何为抖音店铺取个好名字呢?以下是一些有用的建议。 明确定位…

Linux配置SSH允许TCP转发

#编辑SSH配置文件 vi /etc/ssh/sshd_config #重启SSH服务 systemctl restart sshd.service AllowTcpForwarding yes

MES生产执行解决方案提供商,可定制工厂MES精益制造管理系统-亿发

亿发智能制造MES系统&#xff1a;驱动制造业创新&#xff0c;实现数字化生产和管理 MES管理系统以实时协同思想为核心&#xff0c;着重于精益生产计划的实施和车间实时调度。对生产现场和业务经营的数据进行全面的系统化管理&#xff0c;以数据分析的结果为基础&#xff0c;协助…

小程序搭建的技巧|网站建设|软件定制APP开发

小程序搭建的技巧|网站建设|软件定制APP开发 首先&#xff0c;我们要知道小程序是一个非常方便的工具&#xff0c;它可以让我们在手机上运行一些应用&#xff0c;不用下载安装&#xff0c;非常方便。小程序可以分为两种&#xff1a;一种是代码开发&#xff0c;另一种是模板开发…

抖音手机实景无人直播间怎么搭建?

手机无人直播已成为用户直播和商家直播带货的一项热门技术趋势&#xff0c;为消费者提供了全新的观看体验。无人直播&#xff0c;顾名思义&#xff0c;即通过无人直播软件或数字人来进行无人直播。这一技术的广泛应用&#xff0c;不仅为短视频渠道带来了更丰富的玩法&#xff0…

MySQL 主从同步(读写分离)

Spring Cloud 微服务系列文章&#xff0c;点击上方合集↑ 1. 开头 在生产环境中&#xff0c;为了应对大量的读写请求并减轻数据库的负载压力&#xff0c;常常会使用MySQL主从同步来实现读写分离的架构。通过这种架构&#xff0c;主数据库负责处理写操作&#xff0c;而从数据库…

知识增强语言模型提示 零样本知识图谱问答10.8

知识增强语言模型提示 零样本知识图谱问答 摘要介绍相关工作方法零样本QA的LM提示知识增强的LM提示与知识问题相关的知识检索 摘要 大型语言模型&#xff08;LLM&#xff09;能够执行 零样本closed-book问答任务 &#xff0c;依靠其在预训练期间存储在参数中的内部知识。然而&…

el-table 设置最大高度且能刚好撑满

max-height"calc(90vh - 120px)"90vh视口高度的90%自行调整即可

【NLTK系列02】NLTK库应用:使用 NLTK 进行情绪分析

使用 NLTK 进行情绪分析 上篇&#xff1a;【NLTK系列】&#xff1a;nltk库介绍&#xff08;01&#xff09;_无水先生的博客-CSDN博客 一、说明 上篇《NLTK库介绍》介绍了NLTK的基本用法&#xff0c;本篇介绍NLTK的一个具体应用&#xff1a;“使用 NLTK 进行情绪分析”&#xf…

C++QT-day2

#include <bits/stdc.h>/*自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c;定义公有成员函数:初始化函数:void init(int w, int h)更改宽度的函数:set_w(int w)更改高度的函数:set_h(int h)输出该矩形的周长和面积函数:void sho…

安卓端App页面狂刷问题记录

一、场景 App基于webview混合开发&#xff0c;业务主要为前端h5实现&#xff0c;其中有一个功能为消息中心&#xff0c;当从通知栏点击消息跳转到指定页面时&#xff0c;前端会不停地刷新页面&#xff0c;一遍又一遍地重复同一批请求。 二、问题分析 1、刚开始怀疑是否前端里…

Mac电脑专业的任务管理软件 Omnifocus Pro 3中文 for mac

OmniFocus Pro是一款针对Mac平台的高效任务管理软件&#xff0c;它可以帮助用户处理日常事务、安排计划任务&#xff0c;同时提高用户的工作效率。该软件具有简单、直观、易于使用的特点&#xff0c;与其他电子任务清单工具相比&#xff0c;OmniFocus Pro更加专注于细节和定制化…

【postgresql】

看到group by 1&#xff0c;2 和 order by 1&#xff0c; 2。看不懂&#xff0c;google&#xff0c;搜到了Stack Overflow 上有回答 What does SQL clause “GROUP BY 1” mean? 大概意思就是&#xff0c;group by&#xff0c; order by 后面跟数字&#xff0c;指的是 selec…

漏刻有时数据可视化大屏(16)数据指标KPI和柱图折线图混排

CSS样式表 /*面板*/ .pannel {width: 100%;margin-top: 30px;clear: both; }.item_l {float: left;width: 20%; /*3格60%*/margin: 0; }.item_r {float: left;width: 10%; /*4格40%*/margin: 0; }.item_child {float: left;width: 50%; }.item_child_b {float: left;width: 10…