class Solution {
public:
vector<vector<int>> ans;
void DFS(TreeNode* root, int targetSum, vector<int>& path){
if (!root) return;
path.push_back(root->val); // 加入目前節點
// 是葉節點且剛好等於目標總和
if (!root->left && !root->right && targetSum == root->val) {
ans.push_back(path); // 放入答案
}
// 遞迴左右子樹,減去目前節點值
DFS(root->left, targetSum - root->val, path);
DFS(root->right, targetSum - root->val, path);
path.pop_back(); // 回溯:移除最後一個元素
}
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
vector<int> path;
DFS(root, targetSum, path);
return ans;
}
};