leetcode-112. 路徑總和
阿新 • • 發佈:2018-12-10
題目
- 路徑總和 題目描述提示幫助提交記錄社群討論閱讀解答 給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例: 給定如下二叉樹,以及目標和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。
思路
- 判斷該節點是否為空
- 判斷該節點是否為葉子節點(注意,判斷葉子節點,是看這個節點的左右子樹同時為空,而不是判斷該節點是否為空)
- 然後使用遞迴判斷該節點的自由子樹是否滿足題目要求
- 如果都不滿足。最後返回False
程式碼
# 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 root == None: # 1判斷該節點是否為空
return False
if root.left == None and root.right == None and root.val == sum:
return True # 2判斷該節點是否為葉子節點和是否路徑和等於sum
#第1和第2步是遞迴的終止條件
if(self.hasPathSum(root.left,sum - root.val)):
return True
if(self.hasPathSum(root.right,sum - root.val)):
return True
return False