# **Leetcode筆記(Path Sum)** :::info :information_source: 題目 : Path Sum, 類型 : binary tree , 等級 : easy 日期 : 2023/10/18,2023/12/10,2024/02/20,2025/02/15 ::: ### 嘗試 2023/12/10 ```python """ if not root: return False return dfs(root, 0) def dfs(): if they are leaf: compare temp = targetSum if temp == targetSum: return True return dfs(node.left, temp + node.val) or dfs(node.right, temp + node.val) """ class Solution(object): def hasPathSum(self, root, targetSum): if not root: return False def dfs(node, temp): if not node: return temp += node.val if not node.left and not node.right: if temp == targetSum: return True else: return return dfs(node.left, temp) or dfs(node.right, temp) return dfs(root, 0) ``` 2024/02/20 ```python class Solution: def __init__(self): self.i = False def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool: if not root: return self.i self.traverse(root, 0, targetSum) return self.i def traverse(self, node, total, targetSum): if not node: if total == targetSum: self.i = True return total += node.val self.traverse(node.left, total, targetSum) self.traverse(node.right, total, targetSum) ``` 2025/02/15 ```python class Solution: def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool: if not root: return False return self.traverse(root, targetSum) def traverse(self, node, total): total -= node.val if total == 0 and not node.left and not node.right: return True if node.left and self.traverse(node.left, total): return True if node.right and self.traverse(node.right, total): return True return False ``` --- ### **優化** 當沒有左右小孩的時候,就去檢查加法是否正確 非嚴格正確,如果有一個正確的,那就會傳True ```python class Solution: def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool: if not root: return False def dfs(node, total): if not node: return False total += node.val if not node.right and not node.left: return total == targetSum return (dfs(node.right, total) or dfs(node.left, total)) return dfs(root, 0) ``` --- **思路** **講解連結** https://www.youtube.com/watch?v=LSKQyOz_P8I Provided by. NeetCode