112.113. 路徑總和 I,II(簡單,中等)
阿新 • • 發佈:2018-12-16
給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
示例:
給定如下二叉樹,以及目標和 sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
返回 true
, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2
# 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, sum): """ :type root: TreeNode :type sum: int :rtype: bool """ if not root: return False sum-=root.val if sum==0: if root.left is None and root.right is None: return True return self.hasPathSum(root.left,sum) or self.hasPathSum(root.right,sum)
執行用時: 68 ms, 在Path Sum的Python3提交中擊敗了81.30% 的使用者
給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
示例:
給定如下二叉樹,以及目標和 sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
返回:
[ [5,4,11,2], [5,8,4,5] ]
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: List[List[int]]
"""
def dummy(root,summ,l):
if not root:
return l
if not root.left and not root.right:
if summ+root.val==sum:
result.append(l+[root.val])
if root.left:
dummy(root.left,summ+root.val,l+[root.val])
if root.right:
dummy(root.right,summ+root.val,l+[root.val])
result=[]
dummy(root,0,[])
return result
執行用時: 72 ms, 在Path Sum II的Python3提交中擊敗了92.86% 的使用者