描述
給定一個二叉樹,它的每個結點都存放着一個整數值。
找出路徑和等於給定數值的路徑總數。
路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
二叉樹不超過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
思路
利用雙重遞歸
1. 根節點 向下遍歷
2. 根的左右節點重新向下遍歷
實現
func pathSum(root *TreeNode, sum int) int {
if root == nil{
return 0
}
return pathSumRecursion(root, sum, 0) + pathSum(root.Left, sum) + pathSum(root.Right, sum)
}
func pathSumRecursion(root *TreeNode, sum int, count int)int{
if root == nil {
return count
}
sum -= root.Val
if sum == 0{
count++
}
count = pathSumRecursion(root.Left, sum, count)
count = pathSumRecursion(root.Right, sum, count)
return count
}