不同路徑之深度遍歷模型

2021-10-07 12:13:37 字數 1539 閱讀 2825

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

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

示例:給定如下二叉樹,以及目標和 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。示例 ...