二叉树中和为某一值的路径
###一、题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
###二、我的思路
1、采用先序递归遍历;
2、设置一个全局性的向量容器vector,用来保存当前的路径;
3、设置一个全局性容器,保存结果;
###三、我的代码
/*
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> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int>> result;
vector<int> current;
traver(root, expectNumber, current, result);
return result;
}
void traver(TreeNode* node, int expectNumber,
vector<int> ¤t, vector<vector<int>> &result){
if(node == NULL){
return;
}
current.push_back(node->val);
if(node->left == NULL && node->right == NULL){
int sum = 0;
for(int i = 0;i < current.size();i++){
sum += current[i];
}
if(sum == expectNumber){
result.push_back(current);
//vector<int>().swap(current);
}
}
if(node->left != NULL){
traver(node->left, expectNumber, current, result);
}
if(node->right != NULL){
traver(node->right, expectNumber, current, result);
}
current.pop_back();
}
};
代码(2018-07-22)
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void findSum(TreeNode* root, int expSum, vector<int>& vec, vector<vector<int>>& res) {
if(root == NULL) return;
vec.push_back(root->val);
int s = accumulate(vec.begin(), vec.end(), 0);
if(s == expSum && !root->left && !root->right) {
res.push_back(vec);
}
findSum(root->left, expSum, vec, res);
findSum(root->right, expSum, vec, res);
vec.pop_back();
}
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<int> vec;
vector<vector<int>> res;
findSum(root, expectNumber, vec, res);
return res;
}
};