Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For 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]
]
簡單來說,就是要你找出所有符合條件的路徑。
解法也沒有很難,跟78. Subsets的邏輯是差不多的
/**
* 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:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> answer;
vector<int> output;
if (root == nullptr)
{
return answer;
}
PathSumDFS(root, sum, answer, output);
return answer;
}
void PathSumDFS(TreeNode* node, int sum, vector<vector<int>> &answer, vector<int> &output)
{
if (node == nullptr)
{
return;
}
output.push_back(node->val);
if (node->left == nullptr && node->right == nullptr)
{
if(node->val == sum)
{
answer.push_back(output);
}
}
PathSumDFS(node->left, sum - node->val, answer, output);
PathSumDFS(node->right, sum - node->val, answer, output);
//返回上一層時需要把這個element清除
output.pop_back();
}
};