《Leetcode》112 路徑總和

2021-10-07 20:54:42 字數 1562 閱讀 1933

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

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

示例:

給定如下二叉樹,以及目標和sum = 22

5

/ \4 8

/ / \

11 13 4

/ \ \

7 2 1

返回true, 因為存在目標和為 22 的根節點到葉子節點的路徑5->4->11->2

題目比較簡單,就是找一條路徑,判斷路徑和等不等於sum,如果等於就返回true,否則就返回false。拿到這個題一開始就想到用dfs,當然一般能用dfs的題目也是可以用bfs的,因此就用兩個方法進行求解。

bfs

判斷有無右子樹

# 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:

#如果樹是空直接返回false

if not root:

return false

#如果是葉子節點就判斷是不是等於sum

if not root.left and not root.right:

return sum==root.val

#dfs進行遞迴的遍歷

#如果到11節點的時候sum就變成了2,然後2又是葉子節點,sum=葉子節點——>返回true

return self.haspathsum(root.left,sum-root.val) or self.haspathsum(root.right,sum-root.val)

if not root:

return false

queue = collections.deque()

#佇列需要儲存節點的資訊和路徑和

while queue:

root,val = queue.popleft()

#如果是葉子節點就判斷是不是等於sum

if not root.left and not root.right:

if val==sum:

return true

if root.left:

if root.right:

return false

總結:路徑總和一般都用dfs,如果用bfs必須儲存節點資訊和當前路徑和資訊。在dfs中是逐個減去節點值,而bfs中是把節點的值逐個加起來。

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。...