题解 | #c++ 看不懂我叫你爹 #
二叉树中和为某一值的路径
http://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
#include <numeric>
class Solution {
public:
//test
vector<vector<int>> results; 用来保存每一条路径的元素
vector<int> result;
void findsum(TreeNode* root){
if(root == nullptr){
return;
}else{
/*先序插入 (一定是根据路径插入)*/
result.push_back(root->val);
if(root->left == nullptr && root->right == nullptr){
results.push_back(result);
}
findsum(root->left);
findsum(root->right);
/*下面这行是核心,一定要理解递归*/
/*后序删除,一个路径遍历完毕开始回溯,下一行删除当前路径尾部节点*/
result.pop_back();
/*实在搞不懂就记住吧,这个方法可以check到所有的路径*/
}
}
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
findsum(root); vector<vector<int>> res;
for(int i = 0;i<results.size();i++){
//对每个vector<int> 求和
int sum = accumulate(results[i].begin(),results[i].end(),0);
cout << sum <<",";
if(sum == expectNumber){
res.push_back(results[i]);
}
}
return res;
}
};