题解 | #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;
    }
};
全部评论

相关推荐

05-28 23:26
河南大学 Java
双非本,刚学完Redis,项目只有外卖和点评,八股没准备,算法只有lqb省一,感觉敲的项目也是一言难尽没怎么吸收。怎么你们都有实习了
大牛之途:27急个锤子,你投日常实习最好的时间就是9,10月份,那时候暑期实习都结束了,正是缺人的时候。这份日常又能给你的暑期实习增加竞争力,暑期找的好了秋招也不怕了,都是环环相扣的
点赞 评论 收藏
分享
评论
11
1
分享

创作者周榜

更多
牛客网
牛客企业服务