题解 | #二叉树中和为某一值的路径#
二叉树中和为某一值的路径
http://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool havePath_One(TreeNode* root,int value)//判断是否存在路径!只考虑当前结点在路上的
{//该函数的功能时用来判断路径走向
if(root==nullptr)
return false;
if(root->val==value)
return true;
return havePath_One(root->left,value-root->val)||havePath_One(root->right,value-root->val);//
}
vector<vector<int> > FindPath(TreeNode* root,int value) {
vector<vector<int> > vec,vec1,vec2,vec3,vec4;
if(root==nullptr)
return vec;
if(havePath_One(root,value))//找到路径的开始结点咯
{
if(havePath_One(root->left,value-root->val))
{
vec1=FindPath(root->left,value-root->val);
for(auto it=vec1.begin();it!=vec1.end();it++)
{
(*it).insert(it->begin(),root->val);
}
}
if(havePath_One(root->right,value-root->val))
{
vec2=FindPath(root->right,value-root->val);
for(auto it=vec2.begin();it!=vec2.end();it++)
{
(*it).insert(it->begin(),root->val);
}
}
if(root->val==value&&root->left==nullptr&&root->right==nullptr)//到达路径的终止节点了,条件式可以不用的
{
vector<int> v;
v.push_back(value);
vector<vector<int> >vv;
vv.push_back(v);
return vv;
}
}
vec1.insert(vec1.end(),vec2.begin(),vec2.end());
return vec1;
}
};