leetcode hot100 路径总和

437. 路径总和 III

已解答

中等

相关标签

相关企业

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum路径 的数目。

路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)

Definition for a binary tree node.

class TreeNode(object):

def init(self, val=0, left=None, right=None):

self.val = val

self.left = left

self.right = right

class Solution(object):

def pathSum(self, root, targetSum):

"""

:type root: Optional[TreeNode]

:type targetSum: int

:rtype: int

"""

self.targetSum = targetSum

self.ret = 0

def dfs(tmp,current):

if tmp==None:

return

current += tmp.val

self.ret += self.prefix.get(current - self.targetSum ,0)

self.prefix[current] = self.prefix.get(current,0) + 1

dfs(tmp.left,current)

dfs(tmp.right,current)

self.prefix[current]-= 1

self.prefix={0:1}

dfs(root , 0)

return self.ret

这里我们需要的是一个非常牛逼的方法,也就是使用深度优先搜索,记录一个前缀和,然后在每次搜索的时候,之保留搜索这条路上的前缀和,这样子计算路径的时候只要把当前的路径前去任意一个前缀和的结果和target对上就行。

笨方法是直接遍历,深度搜索两次

相关推荐
阳洞洞1 小时前
leetcode 2787. Ways to Express an Integer as Sum of Powers
算法·leetcode·动态规划·01背包问题
阳洞洞1 小时前
leetcode 279. Perfect Squares
算法·leetcode·动态规划·完全背包问题
星语心愿.1 小时前
Y1——ST表
c++·算法
新生农民1 小时前
最小覆盖子串
java·数据结构·算法
烁3472 小时前
每日一题(小白)暴力娱乐篇22
java·开发语言·算法·娱乐
rigidwill6662 小时前
华为机试—最大最小路
数据结构·c++·算法·华为od·华为·职场和发展·并查集
鑫—萍3 小时前
数据结构与算法——链表OJ题详解(2)
c语言·开发语言·数据结构·学习·算法·链表
努力学习的小廉3 小时前
我爱学算法之——滑动窗口攻克子数组和子串难题(下)
c++·算法
地平线开发者4 小时前
【征程 6】工具链VP示例中Cmakelists解读
算法·自动驾驶
SWHL4 小时前
rapidocr 2.0 在线demo来了
算法