Leetcode——437. 路徑總和 III

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

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

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

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

二叉樹不超過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 Solution(object):
    def pathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: int
        """
        res = 0
        if root == None:
            return res
        res += self.findPath(root,sum)
        res += self.pathSum(root.left,sum)
        res += self.pathSum(root.right,sum)
        
        return res
    
    def findPath(self,node,num):
        res = 0
        if node == None:
            return res 
        if node.val == num:
            res += 1
        res += self.findPath(node.left, num-node.val)
        res += self.findPath(node.left, num-node.val)
        return res

時間複雜度有點高

相關文章