您的位置:首页 > 其它

Leetcode 113. Path Sum II

2016-05-04 21:31 253 查看
思路:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 二叉树