給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例:給定如下二叉樹,以及目標和 sum = 22,
5
/ \4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。
思路:這道題要檢查是否有目標和,所以我們要把每條路徑都檢查一邊
這就要用深度遍歷了
同時為了減少執行時間,一旦檢查到乙個成立,就可以直接返回,跳層本次遞迴
設計:深度遍歷模型
def
dg(num0)
:if 基例:
return 值1
dg(num1)
dg(num2)
return 值2
'''這是一般深度遍歷模型'''
def
dg(num0)
:if 基例:
return 值1
if dg(num1)
:return
true
if dg(num2)
:return
true
return 值2
'''這深度遍歷模型,是當乙個路徑成立後便返回的模型'''
2.基例設計
因為本題是在葉子結點返回,所以我們的基例是該結點沒有子樹,而不是本結點為空。
例【1,null,2】左孩子為空,1並不是葉子
**:
class
solution
:def
haspathsum
(self, root: treenode,
sum:
int)
->
bool
:def
dg(root,num)
: num+=root.val
ifnot root.left and
not root.right:
'''判斷是否為葉子'''
if num==
sum:
return
true
return
false
if root.left and dg(root.left,num)
or root.right and dg(root.right,num)
:'''先考慮是否有左右孩子,而後先後遞迴(由and的特性,左右要都成立),檢查如果由任意成立直接返回(由or的特性,成立乙個便可以)'''
return
true
return
false
return dg(root,0)
if root else
false
'''空根定不成立'''
62 不同路徑63 不同路徑 II
62.不同路徑 動態規劃清晰步驟 1.定義dp陣列 2.初始化 3.迴圈填充 4.返回結果 class solution 4.返回結果 return dp m 1 n 1 動態規劃寫法2 內部解決初始化問題 class solution2 else if i 0 j 0 else if i 0 j ...
62 不同路徑
一 題目 機械人位於乙個 m x n 網格的左上角,在下圖中標記為 start 開始 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角,在下圖中標記為 finish 結束 問有多少條不同的路徑?例如,上圖是乙個3 x 7網格。有多少可能的路徑?注意 m 和 n 的值均不超過 100。二...
62 不同路徑
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...