1. 程式人生 > >leetcode-112. 路徑總和

leetcode-112. 路徑總和

題目

  1. 路徑總和 題目描述提示幫助提交記錄社群討論閱讀解答 給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。

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

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

          5
         / \
        4   8
       /   / \
      11  13  4
     /  \      \
    7    2      1

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

思路

  1. 判斷該節點是否為空
  2. 判斷該節點是否為葉子節點(注意,判斷葉子節點,是看這個節點的左右子樹同時為空,而不是判斷該節點是否為空)
  3. 然後使用遞迴判斷該節點的自由子樹是否滿足題目要求
  4. 如果都不滿足。最後返回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