給定一個二叉樹,它的每個結點都存放着一個整數值。
找出路徑和等於給定數值的路徑總數。
路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
二叉樹不超過1000個節點,且節點數值範圍是 [-1000000,1000000] 的整數。
思路:主要的點在於不確定當前的節點是否存在於一條路徑上,該路徑的和爲sum,所以需要分情況討論
① 假設當前節點在一條這樣的路徑上,則遞歸尋找其左右子樹,使剩下的和爲sum - root.val
② 假設當前節點並不在這樣一條路徑上,則遞歸尋找其左右子樹,使剩下的和爲sum
③注意返回值條件
# 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: TreeNode, sum: int) -> int:
if root == None:
return 0
res = 0
res = res + self.findPath(root, sum)
# 不包含當前root節點的路徑,和爲sum的路徑個數
res = res + self.pathSum(root.left, sum)
res = res + self.pathSum(root.right, sum)
return res
def findPath(self, root: TreeNode, sum: int) -> int:
# 返回包含root節點的路徑,和爲sum的路徑個數
if root == None:
return 0
res = 0
if root.val == sum:
res = res + 1
res = res + self.findPath(root.left, sum - root.val)
res = res + self.findPath(root.right, sum - root.val)
return res