問題描述:
給定乙個二叉樹,它的每個結點都存放著乙個整數值。
找出路徑和等於給定數值的路徑總數。
路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
二叉樹不超過1000個節點,且節點數值範圍是 [-1000000,1000000] 的整數。
示例:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8方法1:10/ \5-3/\\3211/ \\3 -21返回 3。和等於 8 的路徑有:
1. 5 -> 3
2. 5 -> 2 -> 1
3. -3 -> 11
1class
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:
1class
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:
1class
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 ...