【小白用python刷Leetcode】112. 路径总和

112. 路径总和

题目描述

解题思路

终于又刷到老面孔,又不禁笑出声来,这题是很早之前就刷过的啦,也很简单。

思路呢也就是常规思路,就是递归。因为是树这种特殊的数据结构,对应递归很合适,现在看到树首先想到递归,都快成条件反射了。具体来讲就是首先迭代维护在当前递归步骤里sum的取值,即sum = sum - root.val。然后判断当前节点是不是叶子节点,即判断当前节点的左右子节点是否存在,若存在则继续递归,若不存在就判断sum是否为0,为0说明存在这样一条路径,返回True就好。真的太简单了,代码写得也简单,应该是一目了然的。

题解代码:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def hasPathSum(self, root: TreeNode, sum: int) -> bool:
        if not root:  # 特殊情况,单独讨论
            return False  # 本来写的sum == 0,后来发现并不是,直接返回False
        
        sum = sum - root.val
        if not root.left and not root.right:  # 表明是叶子节点
            return sum == 0
        else:  # 递归
            return self.hasPathSum(root.left,sum) or self.hasPathSum(root.right,sum)

时间复杂度O(n),空间复杂度O(h),其中 h 是树的高度。

运行结果:

唉,明天就要去报道上班了,也不知道还能不能有时间每天一题这样练了,担心。。。

原题链接:

https://leetcode-cn.com/problems/path-sum/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值