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

力扣HOT100之二叉树: 437. 路径总和 III


感觉这道题还是有点难,想了半天没想出来直接去看题解了,感觉要反复刷。这道题和之前的560. 和为 K 的子数组很像,对应的博客是这篇,建议先去看前面的博客再来看这道题。这道题更难一些,这道题需要用哈希表来记录符合条件的前缀的个数,除此以外,我们还需要用到回溯的思想,因为我们是根据当前的节点值来向上查找路径个数,当我们在一个左子树中查找完所有符合条件的路径后,还需要到右子树中查找符合条件的路径,但是右子树中的路径的节点与左子树完全不相关,所以我们需要及时回退,将哈希表中关于左子树路径相关的记录删除。感觉这道题的思路还是不太好描述,最好还是结合灵神的题解来看。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int pathSum(TreeNode* root, int targetSum) {int result = 0;//初始化哈希表,必须这么做//目的是防止根节点值正好等于targetSum的情况无法被统计unordered_map<long long, int> Hash{{0, 1}};  //定义递归遍历二叉树的lambda函数auto dfs = [&](this auto&& dfs, TreeNode* node, long long s){//递归终止条件if(!node) return ;//单层递归主体s += node -> val;//将node当作路径的重点,统计起点的数量result += Hash[s - targetSum];   //如果没有s - targetSum这个键就会新建,且值为0//回溯Hash[s]++;dfs(node -> left, s);dfs(node -> right, s);Hash[s]--;};dfs(root, 0);return result;}
};

相关文章:

  • Android Service与BroadcastReceiver深度解析:从零到一的实现与优化
  • PyTorch性能调优实战:从算子优化到分布式训练全攻略
  • Vscode +Keil Assistant编译报错处理
  • Golang——1、环境搭建与入门
  • vscode git push 记录
  • Golang 访问 map 中的结构体字段时如何避免拷贝
  • Qt 最新版6.9.0使用MQTT连接腾讯云详细教程
  • paddlehub搭建ocr服务
  • 免费轻量便携截图 录屏 OCR 翻译四合一!提升办公效率
  • 开搞:第四个微信小程序:图上县志
  • 腾讯云媒体AI解码全球视频出海智能密码
  • 大模型在闭合性胫骨平台骨折诊疗全流程中的应用研究报告
  • UniApp+Vue3微信小程序二维码生成、转图片、截图保存整页
  • 现代生活的健康密钥:养生新法则
  • 记录:uniapp 上线部署到微信小程序vendorjs包过大的问题
  • 外网如何连接内网中的mysql数据库服务器?简单网络工具方案
  • uniapp-商城-65-shop(1-品牌信息显示,将数据库信息同步到vuex的state)
  • uni-app(3):互相引用
  • uni-app学习笔记九-vue3 v-for指令
  • PP-YOLOE-SOD学习笔记1
  • 职业生涯规划大赛怎么准备/5g网络优化
  • wordpress搭建多个购物网站/学生个人网页制作素材
  • 抚州网站建设公司/网络推广服务商
  • 建筑材料市场信息价网/网络搜索引擎优化
  • 做一个网站的策划方案/策划方案怎么做
  • 做网站和做网页有啥区别/网络推广平台排名