Leetcode 113. 路径总和 II(Path Sum II)

大憨熊 提交于 2020-02-28 13:51:02

Leetcode 113.路径总和 II

1 题目描述(Leetcode题目链接

  给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。
示例:

给定如下二叉树,以及目标和 sum = 22
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1
返回:
[
   [5,4,11,2],
   [5,8,4,5]
]

2 题解

  与112题路径总和相同的做法,深度优先搜索解决该问题

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
        if not root:
            return []
        retv = []
        def DFS(stack, node, curr_sum):
            if not node.left and not node.right and curr_sum == 0:
                retv.append(stack)
                return
            if node.left:
                DFS(stack + [node.left.val], node.left, curr_sum - node.left.val)
            if node.right:
                DFS(stack + [node.right.val], node.right, curr_sum - node.right.val)
        DFS([root.val], root, sum - root.val)
        return retv

但是效率好像不高,贴个靠前的解法,利用的是前序遍历:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def __init__(self):
        self.stack = []
        self.ans = []
    
    def sums(self):#求和函数
        res = 0
        for i in self.stack:
            res += i
        return res

    def qx(self,root,sum):#前序遍历
        self.stack.append(root.val)
        if root.left or root.right:
            if root.left:#左节点
                self.qx(root.left,sum)
                self.stack.pop()
            if root.right:#右节点
                self.qx(root.right,sum)
                self.stack.pop()
        else:#叶子节点
            if self.sums() == sum:
                self.ans.append(self.stack.copy())
                return
            return 

    def pathSum(self, root: TreeNode, sum: int) -> bool:
        if root:
            self.qx(root,sum)
        return self.ans
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!