437. 路径总和 III
题目描述
解题思路
1、前缀和的干活,详情参见参考
代码实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> int:
""" 前缀和 + 前序遍历 """
self.res = 0
def pre_order(root, sum_list) -> None:
if not root:
return 0
sum_list = [val + root.val for val in sum_list]
sum_list.append(root.val)
self.res += sum_list.count(sum)
pre_order(root.left, sum_list)
pre_order(root.right, sum_list)
pre_order(root, [])
return self.res
def pathSum1(self, root: TreeNode, sum: int) -> int:
""" 写法二 """
def pre_order(root, sum_list):
if not root:
return 0
sum_list = [val + root.val for val in sum_list]
sum_list.append(root.val)
count = sum_list.count(sum)
return count + pre_order(root.left, sum_list) + pre_order(root.right, sum_list)
return pre_order(root, [])