給定乙個二叉樹,它的每個結點都存放著乙個整數值。
找出路徑和等於給定數值的路徑總數。
路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
二叉樹不超過1000個節點,且節點數值範圍是 [-1000000,1000000] 的整數。
示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
10/
5 -3
/ \
3 2 11
/ \
3 -2 1
返回 3。和等於 8 的路徑有:
5 -> 3
5 -> 2 -> 1
-3 -> 11
1.在題幹的描述中難點在於路徑不需要從根節點開始,也不需要在葉子節點結束
1)不妨先考慮路徑必須要從根節點開始再到葉節點結束,記錄路徑中滿足sum的路徑和,這就會構成第一層遞迴
此時遍歷在葉節點結束,但構成sum的路徑不一定結束在葉節點
2)將每個遍歷到的節點都看作根節點,則構成第二層遞迴
此時每個遍歷到的節點,則會實現不一定從根節點出發
class
solution
(object):
#第一層遞迴,類似於樹的中序遍歷
#實現:讓遍歷到的每個節點,依次作為根節點
defpathsum
(self, root,
sum)
: pathnum=
0if root!=
none
and root.val!=
none
: pathnum=pathnum+self.fun(root,
sum)
pathnum=pathnum+self.pathsum(root.left,
sum)
pathnum=pathnum+self.pathsum(root.right,
sum)
return pathnum
#第二層遞迴
#實現:找出從root節點出發到葉節點過程中,和為tempsum的路徑總和
#(注意此處的tempsum與題幹中要求的sum並不相同)
deffun
(self,root,tempsum)
: pathnum=
0if root!=
none
: tempsum=tempsum-root.val
if tempsum==0:
#此時可能還未到達葉節點
pathnum=pathnum+
1
pathnum=pathnum+
self.fun(root.left,tempsum)
+ self.fun(root.right,tempsum)
return pathnum
Leetcode 二叉樹路徑
給定乙個二叉樹和乙個值sum,判斷是否有從根節點到葉子節點的節點值之和等於sum的路徑,例如 給出如下的二叉樹,sum 22,5 4 8 11 13 4 7 2 5 1返回true,因為存在一條路徑5 4 11 2的節點值之和為22 bool haspathsum treenode root,int...
二叉樹路徑和
二叉樹中和為某一值的路徑 輸入一棵二叉樹和乙個整數,列印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。示例 給定如下二叉樹,以及目標和sum 22,5 4 8 11 13 4 7 2 5 1返回 5,4,11,2 5,8,4,5 public l...
二叉樹 路徑
二叉樹中,從根節點到葉節點的每一條連線,我們稱之為路徑,最短路徑和最長路徑在之前的部落格中,我們已經完成了對他們的討論,現在我們討論一下,輸出一棵二叉樹中全部的路徑資訊。如下所示 public class operation childbinarytreepath root,return resul...