437. 路径总和 III

℡╲_俬逩灬. 提交于 2020-03-01 07:33:33

给定一个二叉树,它的每个结点都存放着一个整数值。

找出路径和等于给定数值的路径总数。

路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

二叉树不超过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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!