思路:
1.首先遍历路径放到一个vector中,遍历过程中不断计算结点之和。
2.当num>=0时候,到达叶子结点或者和超过num停止此路径的左右孩子的遍历,判断此时和是否与num相等,若相等则放入二重容器。
3.当num<0时候,思考同上。
4.如果树只有根节点,则判断是否与num相等即可。
void allpath(TreeNode* root,vector<int> &s,vector<vector<int> > &vec,int &num,int num_max)
{
if (root)
{
s.push_back(root->val);
num = num + root->val;
if((!root->left&&!root->right))
{
if (num_max<0&&num>=num_max)
{
if(num==num_max&&s.size()>1)
{
vec.push_back(s);
}
}
if (num_max>=0&&num<=num_max)
{
if(num==num_max&&s.size()>1)
{
vec.push_back(s);
}
}
}
else
{
allpath(root->left,s,vec,num,num_max);
allpath(root->right,s,vec,num,num_max);
}
num = num - s.back();
s.pop_back();
}
}
vector<vector<int> > pathSum(TreeNode* root,int num_max) {
int num = 0;
vector<vector<int> > vec_str;
vector<int> s;
if (!root)
{
return vec_str;
}
if (!root->left&&!root->right&&root->val==num_max)
{
vector<int> s;
s.push_back(root->val);
vec_str.push_back(s);
return vec_str;
}
allpath(root,s,vec_str,num,num_max);
return vec_str;
}