題目描述
給定一個二叉樹,它的每個結點都存放着一個整數值。
找出路徑和等於給定數值的路徑總數。
路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
二叉樹不超過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))