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

力扣 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.xdnf.cn/news/15985.html

相关文章:

  • 在Ubuntu22系统上离线部署ai-infra-guard教程【亲测成功】
  • windows C#-本地函数
  • 【计算机组成原理】原码、补码和移码
  • ZooKeeper学习专栏(一):分布式协调的核心基石
  • 阶段1--Linux中的计划任务
  • 大模型词表设计与作用解析
  • 开源安全大模型Foundation-Sec 8B的安全实践
  • Baumer工业相机堡盟工业相机如何通过YoloV8的深度学习模型实现螺母螺丝的分类检测(C#代码,UI界面版)
  • 【开源项目】基于RuoYi-Vue-Plus的开源进销存管理系统
  • 软件工程:需求分析
  • XSS内容总结
  • 建筑墙壁损伤缺陷分割数据集labelme格式7820张20类别
  • 从零到精通:用DataBinding解锁MVVM的开发魔法
  • 优先算法——专题十:哈希表
  • JAVA高级第六章 输入和输出处理(一)
  • 人工智能与心理史学:从阿西莫夫的科幻预言到可计算社会模型>
  • 车载通信架构 --- DoIP协议通信
  • Java多线程基础详解:从实现到线程安全
  • CS231n-2017 Lecture2图像分类笔记
  • Map集合
  • C++入门--lesson4
  • 嵌入式学习-PyTorch(9)-day25
  • HTTPHTTPSTLSDNSRSA
  • Python技术题2
  • 工程图矢量化 笔记 | potrace ezdxf svgpathtools | png转svg保存dxf用matplotlib画出来
  • 如何构建未来的人-AI-环境智能教育生态系统
  • 线性回归问题
  • xss的利用
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • ICT测试原理之--什么是假短