力扣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]
提示:算法
遞歸設計
由於不必定是從根節點開始,因此要遞歸左右子樹,從左右子樹根節點開始向下。
# 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