LeetCode113-路径总和

    xiaoxiao2022-07-02  102

    最近头脑有些不清晰

    总感觉很多事没做

    又不太想去做

    不知道该做什么

    怎么说

    有些懵

    没有状态

    是时候

    该出去浪一波了

    哈哈哈哈哈哈哈哈


    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.csdn.net/weixin_36431280/article/details/90401953

    第112题用了两种方法,我也会基于这两种方法给出相应的方法,改动地方不是很多,所以我就不怎么解释了。但是里面用到了动态规划的方法,对于动态规划题目的求解步骤我还专门写了一篇文章,大家可以看看。

    https://blog.csdn.net/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%

     

    最新回复(0)