LeetCode 437 路徑總和3

2022-06-13 17:36:07 字數 2721 閱讀 4146

問題描述:

給定乙個二叉樹,它的每個結點都存放著乙個整數值。

找出路徑和等於給定數值的路徑總數。

路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。

二叉樹不超過1000個節點,且節點數值範圍是 [-1000000,1000000] 的整數。

示例:

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

10/ \5-3/\\3211/ \\3 -21返回 3。和等於 8 的路徑有:

1. 5 -> 3

2. 5 -> 2 -> 1

3. -3 -> 11

方法1:

1

class

solution(object):

2def

pathsum(self, root, sum):

3"""

4:type root: treenode

5:type sum: int

6:rtype: int

7"""

8def

dfs(root,sum):

9if root ==none:

10return011

if root.val ==sum:

12return 1 + dfs(root.left,0) +dfs(root.right,0)

13return dfs(root.left,sum - root.val) + dfs(root.right,sum -root.val)

14if root ==none:

15return016

return dfs(root,sum) + self.pathsum(root.left,sum) + self.pathsum(root.right,sum)

方法2:

1

class

solution(object):

2def

pathsum(self, root, sum):

3"""

4:type root: treenode

5:type sum: int

6:rtype: int

7"""

8 self.sum=sum

9 self.result=0

10 self.d=

11self.f(root,0)

12return

(self.result)

1314

deff(self,root,csum):

15if(root!=none):

16 csum+=root.val

17if((csum-self.sum) in

self.d):

18 self.result+=self.d[csum-self.sum]

19if(csum in

self.d):

20 self.d[csum]+=1

21else

:22 self.d[csum]=1

23self.f(root.left,csum)

24self.f(root.right,csum)

25 self.d[csum]-=1

方法3:

1

class

solution(object):

2def

pathsum(self, root, target):

3"""

4:type root: treenode

5:type target: int

6:rtype: int

7"""

8 self.count =0

9 predict =

10def

dfs(p, target, pathsum, predict):

11if

p:12 pathsum +=p.val

13 self.count += predict.get(pathsum -target, 0)

14 predict[pathsum] = predict.get(pathsum, 0) + 1

15dfs(p.left, target, pathsum, predict)

16dfs(p.right, target, pathsum, predict)

17 predict[pathsum] -= 1

18dfs(root, target, 0, predict)

19return

self.count

20

2018-10-02 20:04:13

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