# 【LeetCode】 113. Path Sum II
## Description
> Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
> Note: A leaf is a node with no children.
> 給你一棵二元樹和一個總和值,找到從樹根到樹葉的路徑中,所有節點加總等於給予的總和值的路徑。
> 提示:一個樹葉就是沒有小孩的節點。
## Example:
```
Example:
Given the below binary tree and sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
Return:
[
[5,4,11,2],
[5,8,4,5]
]
```
## Solution
* 用`DFS`跑所有路線,跑到樹根時去判斷總和有沒有相等,有的話就加到答案中。
* 如果確定二元樹的值都是非負數,可以進行剪枝加速,不過這邊我沒有去測試。
### Code
```C++=1
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void DFS(vector<vector<int>>& ans, vector<int> path, TreeNode* node, int sum, int target)
{
if(!node)
{
return;
}
path.push_back(node->val);
sum+=node->val;
if(!node->left && !node->right)
{
if(sum == target)
ans.push_back(path);
return;
}
DFS(ans,path,node->left,sum,target);
DFS(ans,path,node->right,sum,target);
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> ans;
DFS(ans,vector<int>(0,0),root,0,sum);
return ans;
}
};
```
###### tags: `LeetCode` `C++`