參考自字首和–是指到達當前元素的路徑
之前所有元素的和
# 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: treenode,
sum:
int)
->
int:
num_dict =
num_dict[0]
=1# 初始化,字首和為0的一條路徑
return self.recursionpathsum(root, num_dict,
sum,0)
defrecursionpathsum
(self, node, num_dict, target, currsum):if
(node ==
none):
return
0 res =
0 currsum += node.val # 當前路徑和
''' 重點:
如果此前有和為currsum-target,而當前的和又為currsum,兩者的差就肯定為target了
所以根據當前num_dict的值進行搜尋,將結果加入res中
'''res += num_dict.get(currsum-target,0)
num_dict[currsum]
= num_dict.get(currsum,0)
+1res += self.recursionpathsum(node.left, num_dict, target, currsum)
res += self.recursionpathsum(node.right, num_dict, target, currsum)
num_dict[currsum]-=1
# 回到本層,去掉本層的路徑和
return res
437 路徑總和 III
給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 root 10,5,3,3,2...
437 路徑總和 III
給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 root 10,5,3,3,2...
437 路徑總和 III
和112 113題類似 不過這一題更難一些,需要進行雙重遞迴 即對每個節點做遞迴,再以該節點為起點進行dfs,搜尋滿足條件的路徑 class solution object def init self self.count 0 def pathsum self,root,sum if not roo...