leetcode 437 路徑總和三

2021-10-08 03:04:25 字數 1865 閱讀 8366

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

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

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

二叉樹不超過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

# definition for a binary tree node.

# class treenode(object):

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution(object):

def pathsum(self, root, sum):

""":type root: treenode

:type sum: int

:rtype: int

"""if root == none:

return 0

count = self.summation(root, 0, sum)

count += self.preorder(root.left, sum)

count += self.preorder(root.right, sum)

return count

def preorder(self, root, sum):

count = 0

count += self.summation(root, 0, sum)

if root != none:

count_left = self.preorder(root.left, sum)

count_right = self.preorder(root.right, sum)

count = count + count_left + count_right

return count

def summation(self, root, prevval, sum):

if root == none:

return 0

count = 0

if root.val + prevval == sum:

count += 1

count_left = self.summation(root.left, prevval + root.val, sum)

count_right = self.summation(root.right, prevval + root.val, sum)

count = count + count_left + count_right

return count

由於路徑不需要從根節點開始,而且也不需要在葉子節點結束,所以比較直觀的想法是先用任意的遍歷演算法(前序,中序,後序都可)找到所有的節點,然後判斷以每個節點為起點的sumpath可能性。在判斷任意節點為起點的sumpath數量時可以使用深度優先的方法,以該節點為起點計算到子節點的路徑之和。最後將每個節點的可能累加在一起,我們就得到了整顆樹的可能性。

所以可以看到其實這種解法是雙重dfs,一層dfs裡面再包含了一層dfs。

Leetcode 437 路徑總和 III

給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 題目解釋 由題意可知,即從二叉...

LeetCode 437 路徑總和 III

給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 root 10,5,3,3,2...

leetcode 437 路徑總和 III

給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個 示例 root 10,5,3,3,2,null,11,3,2,null,1 sum 8 10 5 ...