LeetCode 112 路徑總和

2021-09-25 23:52:28 字數 1225 閱讀 1259

這同樣是一道遞迴和二叉樹的題目,就是給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。返回乙個布林型別,題目描述如下:

這道題目看似沒有頭緒,拿到題目很多朋友就會想是不是要深度優先遍歷一遍二叉樹,然後分別求和,找出結果。其實,我們可以運用一下逆向思維,入上圖中的例子,sum = 22,那麼我們除去根節點 5 ,在 5 的左右子樹中找到和為 22-5=17 的子樹,然後我們再在跟節點為 4 和 8 的子樹中找是否滿足和為17,然後分別除去 4 和 8,分別在 4 和 8 的子樹中找和為 17-4=13 和17-8=9的子樹,以此類推到葉子節點,這裡我們就可以運用遞迴的思想去做了,**如下所示:

# definition for a binary tree node.

# class treenode(object):

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution(object):

def haspathsum(self, root, sum):

""":type root: treenode

:type sum: int

:rtype: bool

"""# root 節點為none

if not root:

return false

# root 節點沒有左右子樹的情況

if not root.left and not root.right:

return root.val == sum

# 左子樹進行遞迴操作

if self.haspathsum(root.left, sum - root.val):

return true

# 右子樹進行遞迴操作

if self.haspathsum(root.right, sum - root.val):

return true

我們用遞迴的方法就可以很容易解決這個題目了,希望通過這道題目,我們可以應用逆向思維和遞迴的方法來解決類似的題目,以及加深大家對遞迴演算法的理解,謝謝。

LeetCode112 路徑總和

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

LeetCode 112 路徑總和

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

Leetcode 112 路徑總和

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