力扣 437 路徑總和III

2021-10-20 07:38:22 字數 1232 閱讀 3889

參考自

字首和–是指到達當前元素的路徑之前所有元素的和

# 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...