# [LeetCode 113. Path Sum II ](https://leetcode.com/explore/challenge/card/august-leetcoding-challenge-2021/613/week-1-august-1st-august-7th/3838/)
### Daily challenge Aug 4, 2021 (MEDIAN)
>Given the `root` of a binary tree and an integer `targetSum`, return all **root-to-leaf** paths where each path's sum equals targetSum.
>
>A **leaf** is a node with no children.

:::info
**Example 1:**
**Input:** root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
**Output:** [[5,4,11,2],[5,8,4,5]]
:::

:::info
**Example 2:**
**Input:** root = [1,2,3], targetSum = 5
**Output:** []
:::
:::info
**Example 3:**
**Input:** root = [1,2], targetSum = 0
**Output:** []
:::
:::warning
**Constraints:**
* The number of nodes in the tree is in the range [0, 5000].
* -1000 <= Node.val <= 1000
* -1000 <= targetSum <= 1000
:::
---
### Approach 1 : DFS :bulb:
**`8 ms ( 81.38% )`** **`O()`**
使用 `DFS` 從 `root` 搜尋到 `leaf` ,再判斷 `sum` 是否等於 `targetSum`。
* 使用 `current` 紀錄當前 `path`。
>```cpp=15
> current.push_back(root->val);
>```
>```cpp=23
> current.pop_back();
>```
>
* 若 **`root->left == NULL && root->right == NULL`** 表示該點為 `leaf node`。
---> **`sum == targetSum`** -> 找到一個答案。
```cpp=1
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void dfs(TreeNode* root, int targetSum, vector<vector<int>>& ans, vector<int>& current, int sum){
current.push_back(root->val);
if(root->left == NULL && root->right == NULL){
if(sum + root->val == targetSum) ans.push_back(current);
}
if(root->left != NULL) dfs(root->left, targetSum, ans, current, sum + root->val);
if(root->right != NULL) dfs(root->right, targetSum, ans, current, sum + root->val);
current.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
vector<vector<int>> ans;
vector<int> current;
if(root == NULL) return ans;
dfs(root, targetSum, ans, current, 0);
return ans;
}
};
```