LeetCode113-路径总和

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

最近头脑有些不清晰

总感觉很多事没做

又不太想去做

不知道该做什么

怎么说

有些懵

没有状态

是时候

该出去浪一波了

哈哈哈哈哈哈哈哈


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%

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习的学习者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值