給定二叉樹根節點 root 與目標和 targetSum。判斷是否存在從根節點到葉子節點的路徑,使得路徑上所有節點值之和等於 targetSum。存在回傳 true,否則 false。
範例:
3
/ \
9 20
/ \
15 7
/
14
targetSum = 12 → true (路徑 3→9)
遞歸進入節點時,將目標值減去當前節點值:remaining = targetSum - node.val。若到達葉子節點且 remaining == 0,找到有效路徑。否則遞歸檢查左右子樹。
# Definition for a binary tree node.
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
if not root:
return False
targetSum -= root.val
if targetSum == 0 and not root.left and not root.right:
return True
return self.hasPathSum(root.left, targetSum) or self.hasPathSum(root.right, targetSum)
struct TreeNode {
int val;
TreeNode *left, *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if (!root) return false;
targetSum -= root->val;
if (targetSum == 0 && !root->left && !root->right) return true;
return hasPathSum(root->left, targetSum) || hasPathSum(root->right, targetSum);
}
};
false。targetSum,無需額外累加變數。O(N),每個節點訪問一次。O(H) 遞歸棧深度,H 為樹高。最壞 O(N)(退化鏈),平均 O(log N)(平衡樹)。