当前位置: 首页 > news >正文

力扣 hot100 Day50

437. 路径总和 III

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。

路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

//抄的
class Solution {
public:int pathSum(TreeNode* root, int targetSum) {unordered_map<long long, int> prefixSumCount;prefixSumCount[0] = 1;return helper(root, 0, targetSum, prefixSumCount);}private:int helper(TreeNode* node, long long currentSum, int targetSum, unordered_map<long long, int>& prefixSumCount) {if (!node) {return 0;}currentSum += node->val;int res = prefixSumCount[currentSum - targetSum];prefixSumCount[currentSum]++;res += helper(node->left, currentSum, targetSum, prefixSumCount);res += helper(node->right, currentSum, targetSum, prefixSumCount);prefixSumCount[currentSum]--;return res;}
};

前缀和与哈希表结合,递归沿用之前路径总和的题目逻辑

前缀和是指从根节点到当前节点的路径上所有节点值的和。

利用前缀和可以快速计算任意子路径的和:子路径和 = 当前前缀和 - 历史前缀和

使用哈希表 prefixSumCount 记录遍历过程中所有前缀和的出现次数。通过检查 currentSum - targetSum 是否在哈希表中,直接得到以当前节点为终点的满足条件的路径数目。

主要逻辑如下

prefixSumCount[0] = 1:表示前缀和为 0 的路径初始出现一次(空路径)

​终止条件​​:当前节点为空时返回 0

​计算当前前缀和​​:currentSum += node->val

统计满足条件的路径​​:res = prefixSumCount[currentSum - targetSum]。如果 currentSum - targetSum 存在于哈希表中,说明存在一个历史前缀和,使得两者之差为 targetSum,即找到一条路径。

更新哈希表​​:prefixSumCount[currentSum]++,记录当前前缀和。

​递归左右子树​​:继续搜索以当前节点为起点的路径。

​回溯​​:prefixSumCount[currentSum]--,确保递归返回时哈希表状态正确(避免干扰其他分支的统计)。

http://www.lryc.cn/news/594353.html

相关文章:

  • 10-day07文本分类
  • Node.js:常用工具、GET/POST请求的写法、工具模块
  • 《剥开洋葱看中间件:Node.js请求处理效率与错误控制的深层逻辑》
  • Node.js worker_threads 性能提升
  • 最新轻量美化表白墙系统源码v2.0 带后台版 附搭建教程
  • RxSwift-事件属性
  • 玄机——第六章 流量特征分析-蚂蚁爱上树
  • 全面解析 JDK 提供的 JVM 诊断与故障处理工具
  • Linux之dpkg--命令的用法
  • MySQL EXPLAIN 解读
  • linux shell从入门到精通(一)——为什么要学习Linux Shell
  • 【OD机试】池化资源共享
  • 小架构step系列20:请求和响应的扩展点
  • OPC UA, CAN, PROFINET, SOCKET, MODBUS, HTTP, S7七种物联网常用协议解释
  • 2.组合式API知识点(1)
  • 【并集查找 二分图】P6185 [NOI Online #1 提高组] 序列|省选-
  • JavaScript 对象操作、继承与模块化实现
  • 基于单片机的数字温度计设计
  • Ubuntu 部署 STUN 与 TURN 服务器
  • BLIP、InternVL Series(下)
  • 从TPACK到TPACK - AI:人工智能时代教师知识框架的重构与验证
  • 血条识别功能实现及原理
  • Mobile Neural Network (MNN) 3.2.1
  • CAN通讯理论与实践:调试和优化全讲解
  • EPLAN 电气制图(十): 继电器控制回路绘制(下)放料、放灰
  • UDP中的单播,多播,广播(代码实现)
  • 前端环境搭建---基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建
  • Linux场景常见的几种安装方式
  • VSCode使用Jupyter完整指南配置机器学习环境
  • 在服务器无网络的环境下安装 VS Code Remote-SSH 组件