112. Path Sum 路径总和
Title
給定一個二叉樹和一個目標和,判斷該樹中是否存在根節(jié)點到葉子節(jié)點的路徑,這條路徑上所有節(jié)點值相加等于目標和。
說明: 葉子節(jié)點是指沒有子節(jié)點的節(jié)點。
示例:
給定如下二叉樹,以及目標和 sum = 22,
5/ \4 8/ / \11 13 4/ \ \7 2 1返回 true, 因為存在目標和為 22 的根節(jié)點到葉子節(jié)點的路徑 5->4->11->2。
遞歸
Solve
觀察要求我們完成的函數(shù),我們可以歸納出它的功能:詢問是否存在從當前節(jié)點 root 到葉子節(jié)點的路徑,滿足其路徑和為 sum。
假定從根節(jié)點到當前節(jié)點的值之和為 val,我們可以將這個大問題轉化為一個小問題:是否存在從當前節(jié)點的子節(jié)點到葉子的路徑,滿足其路徑和為 sum - val。
不難發(fā)現(xiàn)這滿足遞歸的性質,若當前節(jié)點就是葉子節(jié)點,那么我們直接判斷 sum 是否等于 val 即可(因為路徑和已經(jīng)確定,就是當前節(jié)點的值,我們只需要判斷該路徑和是否滿足條件)。若當前節(jié)點不是葉子節(jié)點,我們只需要遞歸地詢問它的子節(jié)點是否能滿足條件即可。
Code
def hasPathSum(self, root: TreeNode, sum: int) -> bool:if not root:return Falseif not root.left and not root.right:return sum == root.valreturn self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)復雜度分析
時間復雜度:O(N),其中 N 是樹的節(jié)點數(shù)。對每個節(jié)點訪問一次。
空間復雜度:O(H),其中 H 是樹的高度??臻g復雜度主要取決于遞歸時棧空間的開銷,最壞情況下,樹呈現(xiàn)鏈狀,空間復雜度為 O(N)。平均情況下樹的高度與節(jié)點數(shù)的對數(shù)正相關,空間復雜度為 O(logN)。
總結
以上是生活随笔為你收集整理的112. Path Sum 路径总和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进阶指南:如何编写可重用程序
- 下一篇: 最长公共子序列Lcs 51Nod - 1