LeetCode 437*. 路徑總和(Python)

給定一個二叉樹,它的每個結點都存放着一個整數值。

找出路徑和等於給定數值的路徑總數。

路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。

二叉樹不超過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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章