每個節點都有可能是路徑的開始,所以每次先算以當前節點t為開始的符合條件的路徑有幾條。然後分別算以左右節點為開始的路徑有幾條。最後返回t的路徑條數+左子樹的路徑條數+右子樹的路徑條數。
每次算路徑和是否等於target時,用sum減去當前節點的數值,如果為0,則當前節點正好是乙個路徑的尾節點,當前存在1條,如果不為0,那麼算左右子樹有沒有符合sum-當前節點數值的和的路徑。
class
solution
(object):
defpathsum
(self, root,
sum)
:"""
:type root: treenode
:type sum: int
:rtype: int
"""ifnot root:
return
0 res = self.dfs(root,
sum)
left = self.pathsum(root.left,
sum)
right = self.pathsum(root.right,
sum)
return res+left+right
defdfs(self,root,
sum):if
not root:
return
0 res =
0if root.val ==
sum:
res =
1return res+self.dfs(root.left,
sum-root.val)
+self.dfs(root.right,
sum-root.val)
Leetcode 437 路徑總和 III
給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 題目解釋 由題意可知,即從二叉...
LeetCode 437 路徑總和 III
給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 root 10,5,3,3,2...
leetcode 437 路徑總和 III
給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個 示例 root 10,5,3,3,2,null,11,3,2,null,1 sum 8 10 5 ...