核心仍然是进行深搜,每次搜索有三种情况
1.空节点直接return
2.若为叶子节点,判断加上当前root->val的sum是否等于target,若等于则将当前节点放入当前递归中的vect数组中,并将这个vect数组放入全局变量vec(vector<vector<int>>vec)下。
3.分别创建两个vector(vector<int>x)数组,复制当前递归的vect数组,并将当前root->val放入x中,再分别进行递归。
class Solution {
vector<vector<int>>res;
public:
void dfs(TreeNode * root,int sum,int target,vector<int>vect)
{
//空节点
if (!root)
return ;
//叶子节点
if (root->left==nullptr&&root->right==nullptr)
{
if (sum+root->val==target)
{
vect.push_back(root->val);
res.push_back(vect);
return;
}
else
{
return ;
}
}
//左节点和右节点
vect.push_back(root->val);
vector<int>vecl;
vecl=vect;
dfs(root->left,sum+root->val,target,vecl);
vector<int>vecr;
vecr=vect;
dfs(root->right,sum+root->val,target,vecr);
return ;
}
vector<vector<int>> pathSum(TreeNode* root, int target) {
if (!root)
return res;
vector<int>vec;
dfs(root,0,target,vec);
return res;
}
};