题目描述
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)。
//用递归向下遍历就行了,遇到叶子结点判断一次
void is_value(vector<vector<int>> &vec,int value_now,vector<TreeNode*> path,int number)
{
TreeNode* ptr=path[path.size()-1];
if(ptr->val+value_now==number&&(ptr->left==NULL&&ptr->right==NULL))
{
vector<int> the_vec;
for(auto m:path)
{
the_vec.push_back(m->val);
}
vec.push_back(the_vec);
}
if(ptr->left!=NULL)
{
auto p=path;
p.push_back(ptr->left);
is_value(vec,value_now+ptr->val,p,number);
}
if(ptr->right!=NULL)
{
auto p=path;
p.push_back(ptr->right);
is_value(vec,value_now+ptr->val,p,number);
}
}
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int>> vec;
if(root==NULL)return vec;
vector<TreeNode*> path;
path.push_back(root);
is_value(vec,0,path,expectNumber);
return vec;
}