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)
相关推荐
Sw1zzle19 分钟前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法
青山木27 分钟前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
不会就选b42 分钟前
算法日常・每日刷题--<归并排序>1
数据结构·算法
危桥带雨1 小时前
排序算法(快排、归并、计数、基数排序)
数据结构·算法·排序算法
啦啦啦啦啦zzzz1 小时前
算法:回溯算法
c++·算法·leetcode
IT探索1 小时前
Linux 查找文件指令总结
linux·算法
Lumos1862 小时前
51单片机从零到实战(完结)——后续学习路线建议
算法
稚南城才子,乌衣巷风流2 小时前
DFS序详解:原理、应用与实现
算法·深度优先·图论
稚南城才子,乌衣巷风流2 小时前
动态树(Dynamic Tree)数据结构详解
数据结构·算法