【LeetCode】113. Path Sum II 解題報告(Python)

題目分析:

給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。說明: 葉子節點是指沒有子節點的節點。
示例:給定如下二叉樹,以及目標和 sum = 22,
在這裏插入圖片描述
返回: [[5,4,11,2],[5,8,4,5]]

解題思路:

這一題是【LeetCode】112. Path Sum的進階版,比上一題要稍微難一些,但是用上一題的思路可以解決。

  1. 如果根節點爲空,直接返回[]
if not root: return []
  1. 如果當前節點有值,加入path
if root: path.append(root.val)
  1. 如果左右節點爲空,且當前節點值等於sum就將path加入res
if not root.left and not root.right and root.val == sum:
            res.append(list(path))
  1. 如果左節點有值,遞歸左節點,遞歸返回時證明不滿足,要將path中最後一個節點pop
if root.left:
            self.dfs(root.left, sum - root.val, path, res)
            path.pop()
  1. 如果右節點有值,遞歸右節點,遞歸返回時證明不滿足,要將path中最後一個節點pop
if root.right:
            self.dfs(root.right, sum - root.val, path, res)
            path.pop()

提交代碼:(遞歸,Runtime: 40 ms, faster than 99.97% )

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> 'List[List[int]]':
        if not root: return []
        res = []
        self.dfs(root, sum, [], res)
        return res

    def dfs(self, root, sum, path, res):
        if root: path.append(root.val)
        if not root.left and not root.right and root.val == sum:
            res.append(list(path))
        if root.left:
            self.dfs(root.left, sum - root.val, path, res)
            path.pop()
        if root.right:
            self.dfs(root.right, sum - root.val, path, res)
            path.pop()

參考博客:【LeetCode】112. Path Sum

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章