/*
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;

    }
};