題目:原題鏈接(簡單)
解法 | 時間複雜度 | 空間複雜度 | 執行用時 |
---|---|---|---|
Ans 1 (Python) | O(n^2) | O(n) | 7844ms (5.04%) |
Ans 2 (Python) | O(nlogn) | O(n^2) | 204ms (79.27%) |
LeetCode的Python執行用時隨緣,只要時間複雜度沒有明顯差異,執行用時一般都在同一個量級,僅作參考意義。
解法一(遍歷樹的同時遍歷路徑):
def pathSum(self, root: TreeNode, s: int) -> int:
self.ans = 0
def helper(node, source):
# 處理樹末端的情況
if node is None:
return
# 計算當前路徑
source.append(node.val)
# 判斷路徑是否等於目標值
for i in range(len(source)):
if sum(source[i:]) == s:
self.ans += 1
# 繼續檢查子節點
if node.left is not None:
helper(node.left, copy.deepcopy(source))
if node.right is not None:
helper(node.right, copy.deepcopy(source))
helper(root, [])
return self.ans
解法二(路徑和列表):
def pathSum(self, root: TreeNode, s: int) -> int:
def helper(node, sums):
# 處理樹末端的情況
if node is None:
return 0
# 統計當前路徑和列表
sums = [t + node.val for t in sums] + [node.val]
# 繼續檢查子節點
return sums.count(s) + helper(node.left, sums) + helper(node.right, sums)
return helper(root, [])