力扣hot100:路径总和III

题目描述:

思路:

本题和"和为k的子数组 有异曲同工之妙",思路也相似。可以用一个哈希表去存储每条路径的和,两条路径和只差即为中间路径的和。

可以用递归的方式向下遍历这颗树,定义一个s,表示目前路径的和,每走一个节点就把节点值加入s,然后判断哈希表中是否存在s-targetSum,如果存在说明找到了和为targetSum的路径,不存在就把更新哈希表。

需要注意的是,左右叶子节点递归完之后要回溯哈希表,以免对其他分支的技术产生问题。

代码:

java 复制代码
class Solution {
    private int ans=0;
    public int pathSum(TreeNode root, int targetSum) {
        Map<Long,Integer> cnt=new HashMap<>();
        cnt.put(0L,1);
        dfs(root,0,targetSum,cnt);
        return ans;
    }
    private void dfs(TreeNode node,long s,int targetSum,Map<Long,Integer> cnt){
        if(node==null){
            return;
        }
        s+=node.val;
        ans+=cnt.getOrDefault(s-targetSum,0);
        cnt.merge(s,1,Integer::sum);
        dfs(node.right,s,targetSum,cnt);
        dfs(node.left,s,targetSum,cnt);
        cnt.merge(s,-1,Integer::sum);
    }
}
相关推荐
郝学胜-神的一滴4 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
颜酱5 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919106 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878386 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
DuHz6 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女6 小时前
TRSV优化2
算法
代码游侠7 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
2301_763472467 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
abluckyboy8 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
园小异8 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展