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 是树的高度。
运行结果:
唉,明天就要去报道上班了,也不知道还能不能有时间每天一题这样练了,担心。。。
原题链接: