最近头脑有些不清晰
总感觉很多事没做
又不太想去做
不知道该做什么
怎么说
有些懵
没有状态
是时候
该出去浪一波了
哈哈哈哈哈哈哈哈
113-路径总和
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
思路:
这一题就是第112题的进阶版了,第112题只需要我们判断是否存在该路径即可,而此题是需要我们把路径也给找出来,无疑难度增加不少。但其实方法都大同小异,读者对第112题不熟悉的话,可以先看看这篇文章,有个大概印象。
https://blog.youkuaiyun.com/weixin_36431280/article/details/90401953
第112题用了两种方法,我也会基于这两种方法给出相应的方法,改动地方不是很多,所以我就不怎么解释了。但是里面用到了动态规划的方法,对于动态规划题目的求解步骤我还专门写了一篇文章,大家可以看看。
https://blog.youkuaiyun.com/weixin_36431280/article/details/86616672
方法一:
就是情况最多的那种,代码如下:
class Solution(object):
def pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: List[List[int]]
"""
# 定义一列表用来保存所有路径
paths = []
def traverse(root, sum, path=[]):
if root is None:
return
if root.left is None and root.right is None:
new_path = path+[root.val]
if sum == root.val:
paths.append(path+[root.val])
elif root.left is None:
traverse(root.right, sum-root.val, path+[root.val])
elif root.right is None:
traverse(root.left, sum-root.val, path+[root.val])
else:
traverse(root.left, sum-root.val, path+[root.val])
traverse(root.right, sum-root.val, path+[root.val])
traverse(root, sum)
return paths
执行效率还是可以,在94%左右。

方法二:
就是情况比较少的那种,代码如下:
class Solution(object):
def pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: List[List[int]]
"""
# 定义一列表用来保存所有路径
paths = []
def traverse(root, sum, path=[]):
if root is None:
return
if root.left is None and root.right is None:
new_path = path+[root.val]
if sum == root.val:
paths.append(path+[root.val])
if root.left :
traverse(root.left, sum-root.val, path+[root.val])
if root.right:
traverse(root.right, sum-root.val, path+[root.val])
traverse(root, sum)
return paths
执行效率有了进一步提升,在100%

博客聚焦 LeetCode 113 题,即给定二叉树和目标和,找出从根到叶子节点路径总和等于目标和的所有路径。此为第 112 题进阶,难度增加。基于第 112 题的两种方法给出对应解法,涉及动态规划,还给出相关文章链接,展示两种方法代码及执行效率。
464

被折叠的 条评论
为什么被折叠?



