当前位置: 移动技术网 > IT编程>脚本编程>Python > 【小白用python刷Leetcode】112. 路径总和

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

2020年07月08日  | 移动技术网IT编程  | 我要评论

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/

本文地址:https://blog.csdn.net/qq_30388425/article/details/107175244

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网