现在,有问题如下:
问题参考牛客网《leetcode》部分,即针对二叉树求解其和为定值的所有路径,我们的解决思路为递归的进行求解,若该路径和为给定的定值,则将其加入,否则,继续求解!
实现代码如下:
代码1:
class Solution {
public:
vector<vector<int> > pathSum(TreeNode *root, int sum) {
vector<int> v;
vector<vector<int> >vv;
pathSum(root,sum,0,v,vv);
return vv;
}
//统计每一次的的当前和,将当前和和定值进行比对,若相等则添加
void pathSum(TreeNode* root,int sum,int cur,vector<int> v,vector<vector<int> >& vv){
if(!root) return;
v.push_back(root->val);
cur+=root->val;
if(root->left==NULL&&root->right==NULL&&sum==cur){
vv.push_back(v);
}
if(root->left) pathSum(root->left,sum,cur,v,vv);
if(root->right) pathSum(root->right,sum,cur,v,vv);
v.pop_back();
cur-=root->val;
}
};
代码2:
通过设置sum不断减小来达到相同的目的,同时还可以减少参数!
class Solution {
public:
vector<vector<int> > pathSum(TreeNode *root, int sum) {
vector<int> v;
vector<vector<int> >vv;
pathSum(root,sum,v,vv);
return vv;
}
void pathSum(TreeNode* root,int sum,vector<int> v,vector<vector<int> >&vv){
if(!root) return;
v.push_back(root->val);
if(root->left==NULL&&root->right==NULL&&sum-root->val==0){
vv.push_back(v);
}
if(root->left) pathSum(root->left,sum-root->val,v,vv);
if(root->right) pathSum(root->right,sum-root->val,v,vv);
v.pop_back();
}
}