【算法二十九】 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)

相关推荐
城管不管18 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
月疯18 小时前
二分法算法(水平等分图形面积)
算法
豆瓣鸡18 小时前
算法日记 - Day3
java·开发语言·算法
白白白小纯19 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
Achou.Wang19 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
The Chosen One98519 小时前
高进度算法模板速记(待完善)
java·前端·算法
土豆.exe1 天前
Fastjson2 2.0.53 哈希碰撞 RCE:从原理到三种打法
算法·哈希算法
黄河123长江1 天前
有限Abel群的结构()
算法
Jerry1 天前
LeetCode 92. 反转链表 II
算法
骊城英雄1 天前
Rust从入门到精通-trait
人工智能·算法·rust