题目:
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:
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]
]
思路:将根节点到叶子结点的路径保存起来,并且判断结点值之和等于给定的值,如果是则把该路径保存到要返回的路径数组。
程序:
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
dfs(root, sum);
return v;
}
private:
vector<vector<int>> v;
vector<int> vec;
void dfs(TreeNode* root, int sum){
if(!root) return;
else if(root->left == NULL && root->right == NULL){
int temp = 0;
vec.push_back(root->val);
for(int i = 0; i < vec.size(); i++) temp += vec[i];
if(temp == sum) v.push_back(vec);
return;
}
vec.push_back(root->val);
if(root->left){
dfs(root->left, sum);
vec.pop_back();
}
if(root->right){
dfs(root->right, sum);
vec.pop_back();
}
}
};