假定從根節點到當前節點的值之和為 val,我們可以將這個大問題轉化為乙個小問題:是否存在從當前節點的子節點到葉子的路徑,滿足其路徑和為 sum - val。
不難發現這滿足遞迴的性質,若當前節點就是葉子節點,那麼我們直接判斷 sum 是否等於 val 即可(因為路徑和已經確定,就是當前節點的值,我們只需要判斷該路徑和是否滿足條件)。若當前節點不是葉子節點,我們只需要遞迴地詢問它的子節點是否能滿足條件即可。
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution
:def
haspathsum
(self, root: treenode,
sum:
int)
->
bool:if
not root:
return
false
ifnot 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)
複雜度分析路徑總和 - i LeetCode 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1 如下 definition for a binary tree nod...
LeetCode 路徑總和
給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 root 10,5,3,3,2...
路徑總和 (雙遞迴)
這題是我遇到的第乙個雙遞迴的題目,這題和路徑總和 回溯法 的唯一不同在於它沒有限定路徑的起點 不一定要求是根結點 也沒有限定路徑的終點 不一定要求是葉子結點 所以就要用到雙遞迴了。我的 如下 雙遞迴 class solution void dfs 1 treenode root,int sum vo...