【LeetCode 437】路径总和III(Python)

一、题目
给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。

示例:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
在这里插入图片描述返回 3。和等于 8 的路径有:
5 -> 3
5 -> 2 -> 1
-3 -> 11

二、解题思路
  首先统计路径数肯定需要遍历整个二叉树,加上题目说的需要自顶向下。然后根据题目说的不一定非得从根节点开始,也就是说遍历的时候要注意每个结点都有当头的一次,然后统计满足和的路径。
  因为和是已知量,所以用和减去遍历的数直到等于0,就说明找到了符合条件的路径(这种方法比累加遍历数更简单直接)。根据上面所说的这些,提取到两点(定义的两个函数):1、通过减法找到符合条件的路径并累加路径数 2、遍历所有的数
  注意:因为是全部遍历,所以左右子树都要注意到,写进函数里。我一开始写的时候因为考虑到遍历,所以一直在想怎么用for去解决问题。但二叉树是给定的类,所以用for反而很难处理,以后记住不能什么问题一上来都用for解决,定义函数去递归调用也是很好的方法。而且我发现和二叉树有关的题(目前已经碰见五六道了)大家都是用的if去想办法解决,基本上没人用for,即使是需要遍历。这样的好处是时间复杂度会小很多,而且也很简单好理解,一定要学会别人的思考方式,运用到之后的题中去。

三、代码
  是参考一位网友提供的解法写的,也是leetcode里我唯一能看懂的一种写法,其他的都是一行怪,对小白非常不友好。出处:https://leetcode-cn.com/problems/path-sum-iii/solution/zi-shang-er-xia-by-slime-3/

# 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:
        self.account=0
        def throughRoot(root,sum):
            if root==None:return 0
            sum-=root.val
            if sum==0:
                self.account+=1
            throughRoot(root.left,sum)
            throughRoot(root.right,sum)
        def loop(root,sum):
            if root==None:return 0
            throughRoot(root,sum)
            loop(root.left,sum)
            loop(root.right,sum)     
        loop(root,sum)
        return self.account
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值