给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
10
/ \
5 -3
/ \ \
3 2 11
/ \ \
3 -2 1返回 3。和等于 8 的路径有:
1. 5 -> 3
2. 5 -> 2 -> 1
3. -3 -> 11坑:1 if s==0 else 0 三目运算式不要放在return里 ,不然出问题,原因不明
1.双重递归
2.前缀和+递归
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def pathSum(self, root, sum):
if not root:
return 0
def f(t,s):
if not t:
return 0
s-=t.val
res = 1 if s==0 else 0
return res +f(t.left,s)+f(t.right,s)
return f(root,sum)+self.pathSum(root.left,sum)+self.pathSum(root.right,sum)
class Solution(object):
def pathSum(self, root, sum):
self.count = 0
def helper(pre_sum, node, dic, sum_):
if not node:
return
self.count
pre_sum += node.val
self.count += dic.setdefault(pre_sum - sum_, 0)
dic[pre_sum] = dic.setdefault(pre_sum, 0) + 1
helper(pre_sum, node.left, dic, sum_)
helper(pre_sum, node.right, dic, sum_)
dic[pre_sum] -= 1
pre_sum -= node.val
helper(0, root, {0: 1}, sum)
return self.count
来源:CSDN
作者:p0ther
链接:https://blog.csdn.net/qq_36328915/article/details/104578897