LeetCode | 面試題 04.12. 求和路徑【Python】

問題

力扣node

給定一棵二叉樹,其中每一個節點都含有一個整數數值(該值或正或負)。設計一個算法,打印節點數值總和等於某個給定值的全部路徑的數量。注意,路徑不必定非得從二叉樹的根節點或葉節點開始或結束,可是其方向必須向下(只能從父節點指向子節點方向)。python

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

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

返回:github

3
解釋:和爲 22 的路徑有:[5,4,11,2], [5,8,4,5], [4,11,7]

提示:算法

  • 節點總數 <= 10000

思路

遞歸設計

由於不必定是從根節點開始,因此要遞歸左右子樹,從左右子樹根節點開始向下。

代碼

Python3

# 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 not root:
            return 0
        return self.dfs(root, sum) + self.pathSum(root.left, sum) + self.pathSum(root.right, sum)
        
    def dfs(self, root, sum):
        # 要特判爲空,不然下面 sum == root.val 會報錯
        if not root:
            return 0

        res = 0
        if sum == root.val:
            res += 1
        res += self.dfs(root.left, sum - root.val)
        res += self.dfs(root.right, sum - root.val)
        return res

連接

GitHubcode

相關文章
相關標籤/搜索