【算法二十九】 437. 路径总和 III

437. 路径总和 III

前缀和+递归:

java 复制代码
class Solution {
    private int ans;
    public int pathSum(TreeNode root, int targetSum) {
        Map<Long,Integer> count = new HashMap<>();
        count.put(0L,1);
        Long pre = 0L;
        dfs(root,targetSum,pre,count);
        return ans;
    }

    private void dfs(TreeNode node,int targetSum,Long pre,Map<Long,Integer> count){
        if(node == null){
            return;
        }
        pre += node.val;
        ans += count.getOrDefault(pre-targetSum,0);
        count.merge(pre,1,Integer::sum);
        dfs(node.left,targetSum,pre,count);
        dfs(node.right,targetSum,pre,count);
        //恢复,因为左边树弄完还有右边树
        count.merge(pre,-1,Integer::sum);
    }
}

时间复杂度:O(N)

空间复杂度:O(N)

相关推荐
weixin_307779131 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
hetao17338377 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6267 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan7 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356388 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah9 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO99 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician9 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.9 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
潼心1412o10 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法