欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-24 12:19:12
112. 路径总和题目描述解题思路终于又刷到老面孔,又不禁笑出声来,这题是很早之前就刷过的啦,也很简单。思路呢也就是常规思路,就是递归。因为是树这种特殊的数据结构,对应递归很合适,现在看到树首先想到递归,都快成条件反射了。具体来讲就是首先迭代维护在当前递归步骤里sum的取值,即sum = sum - root.val。然后判断当前节点是不是叶子节点,即判断当前节点的左右子节点是否存在,若存在则继续递归,若不存在就判断sum是否为0,为0说明存在这样一条路径,返回True就好。真的太简单了...

112. 路径总和

题目描述

【小白用python刷Leetcode】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 是树的高度。

运行结果:

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

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

原题链接:

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

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