python-leetcode-路径总和 III

437. 路径总和 III - 力扣(LeetCode)

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def pathSum(self, root: Optional[TreeNode], targetSum: int) -> int:
        prefix_sum = defaultdict(int)  # 记录前缀和出现的次数
        prefix_sum[0] = 1  # 初始状态,前缀和为0出现一次

        def dfs(node, curr_sum):
            if not node:
                return 0
            
            curr_sum += node.val  # 更新当前前缀和
            count = prefix_sum[curr_sum - targetSum]  # 计算符合条件的路径数
            
            prefix_sum[curr_sum] += 1  # 记录当前前缀和
            count += dfs(node.left, curr_sum)  # 递归左子树
            count += dfs(node.right, curr_sum)  # 递归右子树
            
            prefix_sum[curr_sum] -= 1  # 回溯,撤销当前节点的前缀和
            
            return count
        
        return dfs(root, 0)
相关推荐
whuhewei12 小时前
React diff算法为什么是DFS,不是BFS
算法·react.js·深度优先
EdmundXjs13 小时前
大模型核心概念解读
人工智能·算法
lookaroundd13 小时前
llm-compressor 普通量化调用链分析
python·算法
中小企业实战军师刘孙亮13 小时前
家居建材营销新趋势:数字化、体验式与可持续方向-佛山鼎策创局破局增长咨询有限公司
职场和发展·产品运营·创业创新·需求分析·学习方法
小羊在睡觉13 小时前
力扣239. 滑动窗口最大值
数据结构·后端·算法·leetcode·go
兰令水13 小时前
topcode【随机算法题】【2026.5.20打卡-java版本】
java·开发语言·算法
此生决int13 小时前
算法从入门到精通——前缀和
c++·算法·蓝桥杯
凯瑟琳.奥古斯特13 小时前
传输层核心功能解析
开发语言·网络·职场和发展
大大杰哥13 小时前
leetcode hot100(4)矩阵
算法·leetcode·矩阵
小白|13 小时前
cmake:昇腾CANN构建系统完全指南
java·c++·算法