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

相关推荐
2501_908329851 小时前
C++安全编程指南
开发语言·c++·算法
计算机安禾2 小时前
【C语言程序设计】第39篇:预处理器与宏定义
c语言·开发语言·c++·vscode·算法·visual studio code·visual studio
m0_569881472 小时前
C++中的装饰器模式变体
开发语言·c++·算法
笒鬼鬼2 小时前
【API接口】最新可用红果短剧接口
算法·api·笒鬼鬼·红果短剧·接口源码
weixin_421922692 小时前
C++与边缘计算
开发语言·c++·算法
2401_831920742 小时前
C++编译期数组操作
开发语言·c++·算法
殷紫川2 小时前
秒杀系统高并发核心优化与落地全指南
算法·架构
野犬寒鸦2 小时前
JVM垃圾回收机制面试常问问题及详解
java·服务器·开发语言·jvm·后端·算法·面试
风酥糖2 小时前
Godot游戏练习01-第16节-游戏中的状态机
算法·游戏·godot