112 Path Sum 路徑總和

2021-10-07 20:25:45 字數 1168 閱讀 3934

給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。

說明: 葉子節點是指沒有子節點的節點。

示例:

給定如下二叉樹,以及目標和 sum = 22,

5

/ \4 8

/ / \

11 13 4

/ \ \

7 2 1

返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。

觀察要求我們完成的函式,我們可以歸納出它的功能:詢問是否存在從當前節點 root 到葉子節點的路徑,滿足其路徑和為 sum。

假定從根節點到當前節點的值之和為 val,我們可以將這個大問題轉化為乙個小問題:是否存在從當前節點的子節點到葉子的路徑,滿足其路徑和為 sum - val。

不難發現這滿足遞迴的性質,若當前節點就是葉子節點,那麼我們直接判斷 sum 是否等於 val 即可(因為路徑和已經確定,就是當前節點的值,我們只需要判斷該路徑和是否滿足條件)。若當前節點不是葉子節點,我們只需要遞迴地詢問它的子節點是否能滿足條件即可。

def haspathsum

(self, root: treenode, sum:

int)

->

bool

:if not root:

return

false

if not root.left and not root.right:

return sum == root.val

return self.

haspathsum

(root.left, sum - root.val) or self.

haspathsum

(root.right, sum - root.val)

時間複雜度:o(n),其中 n 是樹的節點數。對每個節點訪問一次。

空間複雜度:o(h),其中 h 是樹的高度。空間複雜度主要取決於遞迴時棧空間的開銷,最壞情況下,樹呈現鏈狀,空間複雜度為 o(n)。平均情況下樹的高度與節點數的對數正相關,空間複雜度為 o(logn)。

112 路徑總和

給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和sum 22,5 48 1113 4 721返回true,因為存在目標和為 22 的根節點到葉子節點的路徑5 4 11 2。d...

路徑總和 LeetCode 112

因為是從根節點到葉節點的,因此不用關心中間節點,只要在判斷走到葉節點時,一層層減去每一層的節點的值與當前葉子 節點的值一致,則肯定滿足條件。另外,注意避免下面注釋的2個坑。definition for a binary tree node.struct treenode class solution...

112路徑總和

給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。進行分析,遞迴終止的條件是什麼?一次遞迴中要進行什麼操作?遞迴想要返回什麼資訊?終止條件 結點為空 遞迴中操作 sum減去當前結點值,當sum為0且當前為葉子...