【leetcode100】路径总和Ⅲ

devtools/2025/2/3 6:26:09/

1、题目描述

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

示例 1:

输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出:3
解释:和等于 8 的路径有 3 条,如图所示。

2、初始思路

2.1 题目分析

计算二叉树中路径和等于给定目标值 targetSum 的路径数量。

2.1.1 前缀和

前缀和是指从根节点到当前节点的路径上所有节点值的累加和。例如:如果路径是 1 -> 2 -> 3,那么前缀和依次为 1、3(1+2)、6(1+2+3)。

前缀和的核心思想是:

如果从根节点到节点 A 的前缀和为 s1,从根节点到节点 B 的前缀和为 s2,那么从节点 A 到节点 B 的路径和就是 s2 - s1。

因此,如果我们想要找到路径和等于 targetSum 的路径,只需要找到满足 s2 - s1 = targetSum 的前缀对 (s1, s2)。

2.1.2 字典存储

哈希表 cnt 用于记录从根节点到当前节点的路径上,各个前缀和出现的次数。它的作用是:

在遍历时,快速检查是否存在一个前缀和 s1,使得 s2 - s1 = targetSum。如果存在这样的 s1,则说明从某个节点到当前节点的路径和等于 targetSum。

具体来说:

cnt[s] 表示前缀和 s 出现的次数。当我们计算到当前节点的前缀和 s2 时,检查 s2 - targetSum 是否在 cnt 中。如果存在,则说明有 cnt[s2 - targetSum] 条路径满足条件。

2.2 思路

使用前缀和+字典存储

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def pathSum(self, root: Optional[TreeNode], targetSum: int) -> int:ans = 0cnt = defaultdict(int)cnt[0] = 1def dfs(node,s):if not node:return#nonlocal用于修改外部函数中的变量nonlocal ans#s 代表从根节点到当前节点的前缀和,cnt[s]表示前缀和为s的个数s += node.valans += cnt[s - targetSum]cnt[s] += 1dfs(node.left,s)dfs(node.right,s)cnt[s] -= 1dfs(root,0)return ans

http://www.ppmy.cn/devtools/155650.html

相关文章

31.Word:科技论文的译文审交稿【31】

目录 NO1.2.3​ NO4.5.6 NO7.8样式应用和修改&多级列表​ NO9奇偶页页眉 NO10自动编号&交叉引用 NO11.12 NO1.2.3 另存为/F12:考生文件夹只保留译文内容、格式设置、修订批注,删除其他:删除表格的左列→删除第一行将表格转化成…

数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱

本篇将揭露DeepSeek 和其他 AI 大模型差异所在。 目录 ​编辑 一本篇背景: 二性能对比: 2.1训练效率: 2.2推理速度: 三语言理解与生成能力对比: 3.1语言理解: 3.2语言生成: 四本篇小结…

PaddleOCR 截图自动文字识别

春节假期在家无聊,撸了三个小工具:PC截图编辑/PC录屏(用于meeting录屏)/PC截屏文字识别。因为感觉这三个小工具是工作中常常需要用到的,github上也有很多开源的,不过总有点或多或少的小问题,不利于自己的使用。脚本的编…

计算机网络 性能指标相关

目录 吞吐量 时延 时延带宽积 往返时延RTT 利用率 吞吐量 时延 时延带宽积 往返时延RTT 利用率

如何实现滑动网格的功能

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverList组件相关的内容,本章回中将介绍SliverGrid组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverGrid组件是一种网格类组件,主要用来…

Mac上有哪些好用的开源粘贴板app

在Mac上,有几款开源且好用的粘贴板管理工具值得推荐: Maccy 特点:Maccy是一款开源、轻量级的剪贴板管理工具,支持多种功能,包括搜索、Pin单条记录、忽略格式粘贴等。它采用键盘优先设计,操作组合键可减少鼠…

React第二十七章(Suspense)

Suspense Suspense 是一种异步渲染机制,其核心理念是在组件加载或数据获取过程中,先展示一个占位符(loading state),从而实现更自然流畅的用户界面更新体验。 应用场景 异步组件加载:通过代码分包实现组件…

游戏引擎分层架构与总体管线

资源层 管理游戏引擎生态的资源池分配 每个资产的实时生命周期 Resource 各种文件格式的资源 转换importing Asset 资产(高效数据) 引擎中最重要的是资产之间的关联 reference GUID :游戏资产的唯一识别号 运行中资产管理器 Runtime Asse…