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)
相关推荐
TImCheng060911 小时前
内容运营岗位适合考哪个AI证书,与算法认证侧重点分析
人工智能·算法·内容运营
赵域Phoenix11 小时前
混沌系统是什么?
人工智能·算法·机器学习
CoderCodingNo11 小时前
【GESP】C++五、六级练习题 luogu-P1886 【模板】单调队列 / 滑动窗口
开发语言·c++·算法
paeamecium11 小时前
【PAT甲级真题】- All Roads Lead to Rome (30)
数据结构·c++·算法·pat考试·pat
Cando学算法11 小时前
双指针之快慢指针
算法
汀、人工智能11 小时前
[特殊字符] 第100课:任务调度器
数据结构·算法·数据库架构·贪心··任务调度器
每日任务(希望进OD版)11 小时前
二分法刷题
算法·二分
会编程的土豆12 小时前
日常做题 vlog
数据结构·c++·算法
Omigeq12 小时前
1.4 - 曲线生成轨迹优化算法(以BSpline和ReedsShepp为例) - Python运动规划库教程(Python Motion Planning)
开发语言·人工智能·python·算法·机器人
网络工程小王13 小时前
【大模型(LLM)的业务开发】学习笔记
人工智能·算法·机器学习