思路:
建立一个二维数组,其中每一行代表一条路径;
用一个一维数组统计每次的路径,统计结束后放到二维数组中;
当满足结点值和相等并且节点为叶节点时满足条件,把此条路径加入;
利用递归实现
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<vector<int>> result;//存放最终所有的路径,为二维数组
vector<int>temp;//存放每次发现的一条路径
// findonepath(TreeNode *root,int expectNumber);
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
if(root!=NULL)
findonepath(root,expectNumber);//寻找一条路径
return result;
}
void findonepath(TreeNode *root,int expectNumber)
{
temp.push_back(root->val);
if(expectNumber-root->val==0&&root->left==NULL&&root->right==NULL)
result.push_back(temp);
if(root->left!=NULL)
findonepath(root->left,expectNumber-root->val);
if(root->right!=NULL)
findonepath(root->right,expectNumber-root->val);
temp.pop_back();//清楚数组,准备接受第二次路径
}
};