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)
相关推荐
一匹电信狗12 分钟前
【C++】手搓AVL树
服务器·c++·算法·leetcode·小程序·stl·visual studio
月疯14 分钟前
离散卷积,小demo(小波信号分析)
算法
敲代码的瓦龙1 小时前
西邮移动应用开发实验室2025年二面题解
开发语言·c++·算法
RTC老炮1 小时前
webrtc弱网-RembThrottler类源码分析及算法原理
网络·算法·webrtc
野蛮人6号2 小时前
力扣热题100道之73矩阵置零
算法·leetcode·矩阵
野蛮人6号2 小时前
力扣热题100道之238除自身以外数组的乘积
算法·leetcode·职场和发展
坚持编程的菜鸟2 小时前
LeetCode每日一题——缀点成线
c语言·算法·leetcode
派大星爱吃猫2 小时前
直接插入排序详解
算法·排序算法·直接插入排序
一只侯子2 小时前
Tuning——CC调试(适用高通)
开发语言·图像处理·笔记·学习·算法
csdn_aspnet2 小时前
直圆锥(Right Circular Cone)
算法·圆锥