题目描述

输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

思路:对树进行dfs搜索,在搜索过程中逐步减掉结点值,并在一定条件时添加路径,详细解释看代码。

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void dfs(vector<vector<int> >& vv,vector<int> v,TreeNode* t,int e)
{//vv为引用,不会拷贝;v为值传递,每次调用dfs,会被拷贝
if(t)
{
v.push_back(t->val);
if(!t->left&&!t->right&&e==t->val)//判断当前结点为叶结点并且值符合要求的整数
{
vv.push_back(v);
return;
}
else
{
if(t->left&&e>t->val)//若还未达到叶结点,对子树进行搜索
dfs(vv,v,t->left,e-t->val);
if(t->right&&e>t->val)
dfs(vv,v,t->right,e-t->val);
}
}
}
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int> > vv;
vector<int> v;
if(!root) return vv;
dfs(vv,v,root,expectNumber);
return vv;
}
};