题目链接:牛客网
题目描述:
给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum的路径,
例如:
给出如下的二叉树,sum=22,
5↵ / ↵ 4 8↵ / / ↵ 11 13 4↵ / / ↵ 7 2 5 1
返回
[↵ [5,4,11,2],↵ [5,8,4,5]↵]↵
解题思路:本题的解题思路和sum-root-to-leaf-numbers类似。解题思路在之前的博客计算二叉树从根到叶子结点的值有总结。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void findsum(TreeNode *root,int &pathnum,
int flagsum,vector<int> & path,vector<vector<int>> &res){
if(root){
pathnum=pathnum+root->val;
path.push_back(root->val);
if(root->left==NULL&&root->right==NULL){
if(pathnum==flagsum){
res.push_back(path);
}
}else{
if(root->left){
findsum(root->left,pathnum,flagsum,path,res);
}
if(root->right){
findsum(root->right,pathnum,flagsum,path,res);
}
}
path.pop_back();
pathnum=pathnum-root->val;
}
}
vector<vector<int> > pathSum(TreeNode *root, int sum) {
int pathnum=0;
vector<int> path;
vector<vector<int>> res;
findsum(root,pathnum,sum,path,res);
return res;
}
};