LeetCode二叉樹路徑和

2021-10-02 14:02:22 字數 1541 閱讀 1983

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

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

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

二叉樹不超過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...