Leetcode——113. 路徑總和 II

大寫的ZDQ發表於2019-03-19

給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。

說明: 葉子節點是指沒有子節點的節點。

示例:
給定如下二叉樹,以及目標和 sum = 22,

          5
         / \
        4   8
       /   / \
      11  13  4
     /  \    / \
    7    2  5   1

返回:

[
[5,4,11,2],
[5,8,4,5]
]

class Solution:
    def pathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: List[List[int]]
        """
        result = list()
        if root == None:
            return result

        if not root.left and not root.right and sum == root.val:
            result.append([root.val])
            return result

        left = self.pathSum(root.left, sum - root.val)
        for i in left:
            i.insert(0, root.val)
            result.append(i)

        right = self.pathSum(root.right, sum - root.val)
        for i in right:
            i.insert(0, root.val)
            result.append(i)

        return result

用這種方法會報錯int沒有insert,問了大佬後發現第一個left之所以可以insert是因為是treenode型別的,後面是int數值型別的,不可能會有insert,所以不適合用這種解法

def pathSum(self,root,sum):
	self.auxPathSum(root, sum, [], res)
    return res

def auxPathSum(self,root,sum,cur_list,cur_lists):
	if not sum:
		return 
	if sum == 0 and not root.left and not root.right:
		cur_lists.append(cur_list + [root.val])
		return
	if root.left:
		self.auxPathSum(root.left, sum, cur_list + [root.val], cur_lists) 
	if root.right:
		self.auxPathSum(root.right,sum,cur_list + [root.val],cur_lists)

相關文章