Leetcode—437路徑總和II

題目描述

給定一個二叉樹,它的每個結點都存放着一個整數值。

找出路徑和等於給定數值的路徑總數。

路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。

二叉樹不超過1000個節點,且節點數值範圍是 [-1000000,1000000] 的整數。

示例

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

      10
     /  \
    5   -3
   / \    \
  3   2   11
 / \   \
3  -2   1

返回 3。和等於 8 的路徑有:

1.  5 -> 3
2.  5 -> 2 -> 1
3.  -3 -> 11

解題思路:

遞歸,首先從根節點進行遞歸,然後再從子節點進行遞歸,判斷路徑上是否出現和爲目標值的路徑。

class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution(object):
    def __init__(self):
        self.result = []
    def pathSum(self, root, sum):
        if not root:
            return 0
        def Search(node, sum, tempSum, tempList):
            if node is None:
                return
            tempSum += node.val
            if tempSum == sum:
                tempList.append(node.val)
                self.result.append(tempList)
            Search(node.left, sum, tempSum, tempList + [node.val])
            Search(node.right, sum, tempSum, tempList + [node.val])
        Search(root, sum, 0, [])
        self.pathSum(root.left, sum)
        self.pathSum(root.right, sum)
        return self.result

n10 = TreeNode(10)
n5 = TreeNode(5); n_3 = TreeNode(-3)
n3 = TreeNode(3); n2 = TreeNode(2); n11 = TreeNode(11)
n9 = TreeNode(3); n_2 = TreeNode(-2); n1 = TreeNode(1)
n10.left = n5; n10.right = n_3
n5.left = n3; n5.right = n2; n_3.right = n11
n3.left = n9; n3.right = n_2; n2.right = n1
S = Solution()
print(S.pathSum(n10, 8))

 

 

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