112. Path Sum

自己的一个错误写法:

class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL)
return false;
int value = ;
return hasPathSum(root,sum,value);
}
bool hasPathSum(TreeNode* root,int sum,int value){
if(root == NULL){
if(value == sum)
return true;
else
return false;
}
bool left = hasPathSum(root->left,sum,value + root->val);
bool right = hasPathSum(root->right,sum,value + root->val);
return left || right;
}
}; Input:
[,] Output:
true
Expected:
false

只有左右节点都为NULL时才是叶子节点,所以这个代码在例子[1,2],1的右节点时就判断错误了,这个右节点虽然sum满足条件,但他本身不是叶子节点

正确写法:

class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root == NULL)
return false;
if(!root->left && !root->right && root->val == sum)
return true;
return hasPathSum(root->left,sum - root->val) || hasPathSum(root->right,sum - root->val);
}
};

113. Path Sum II

class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> result;
vector<int> res;
pathSum(root,sum,result,res);
return result;
}
void pathSum(TreeNode* root,int sum,vector<vector<int>>& result,vector<int>& res){
if(root == NULL)
return;
res.push_back(root->val);
if(!root->left && !root->right && root->val == sum)
result.push_back(res);
pathSum(root->left,sum - root->val,result,res);
pathSum(root->right,sum - root->val,result,res);
res.pop_back();
}
};

第二种写法:

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> result;
vector<int> res;
pathSum(root,sum,res,result);
return result;
}
void pathSum(TreeNode* root,int sum,vector<int> res,vector<vector<int>>& result){
if(root == NULL)
return;
if(!root->left && !root->right && root->val == sum){
res.push_back(root->val);
result.push_back(res);
}
res.push_back(root->val);
pathSum(root->left,sum - root->val,res,result);
pathSum(root->right,sum - root->val,res,result);
return;
}
};

437. Path Sum III

注意:

  1. i只能到size-1,如果到size,就是把所有的和都减掉,相当于没有任何节点相加

  2. 不能写成if(curSum == sum)

       else{

         减去res中之前的数

       }

   因为即使是当前位置到根节点满足情况,也有可能当前位置到根下面的节点也满足情况

class Solution {
public:
int pathSum(TreeNode* root, int sum) {
vector<int> res;
int num = ;
int curSum = ;
pathSum(root,sum,curSum,res,num);
return num;
}
void pathSum(TreeNode* root,int sum,int curSum,vector<int>& res,int& num){
if(root == NULL)
return;
curSum += root->val;
if(curSum == sum)
num++;
res.push_back(root->val);
int t = curSum;
for(int i = ;i < res.size() - ;i++){
t -= res[i];
if(t == sum)
num++;
}
pathSum(root->left,sum,curSum,res,num);
pathSum(root->right,sum,curSum,res,num);
res.pop_back();
}
};

leetcode 112. Path Sum 、 113. Path Sum II 、437. Path Sum III的更多相关文章

  1. 记录我的 python 学习历程-Day13 匿名函数、内置函数 II、闭包

    一.匿名函数 以后面试或者工作中经常用匿名函数 lambda,也叫一句话函数. 课上练习: # 正常函数: def func(a, b): return a + b print(func(4, 6)) ...

  2. leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes

    263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...

  3. leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String

    344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...

  4. leetcode 198. House Robber 、 213. House Robber II 、337. House Robber III 、256. Paint House(lintcode 515) 、265. Paint House II(lintcode 516) 、276. Paint Fence(lintcode 514)

    House Robber:不能相邻,求能获得的最大值 House Robber II:不能相邻且第一个和最后一个不能同时取,求能获得的最大值 House Robber III:二叉树下的不能相邻,求能 ...

  5. leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)

    136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...

  6. lintcode 787. The Maze 、788. The Maze II 、

    787. The Maze https://www.cnblogs.com/grandyang/p/6381458.html 与number of island不一样,递归的函数返回值是bool,不是 ...

  7. 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串

    第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...

  8. 【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)

    总述 全部用DFS来做 重点一:参数的设置:为Root,路径字符串,路径List集合. 重点二:步骤: 1 节点为null 2 所有节点的操作 3 叶子结点的操作 4 非叶节点的操作 题目257. 二 ...

  9. [LeetCode] #112 #113 #437 Path Sum Series

    首先要说明二叉树的问题就是用递归来做,基本没有其他方法,因为这数据结构基本只能用递归遍历,不要把事情想复杂了. #112 Path Sum 原题链接:https://leetcode.com/prob ...

随机推荐

  1. vue常用笔记

    vue源码解析(勾三股四):http://jiongks.name/blog/vue-code-review/ 0.npm: https://www.npmjs.com/ 1. package.jso ...

  2. Linux常用基本命令:三剑客命令之-awk格式化动作

    我们之前说过,awk是一个超强的文本格式化工具,而本文的printf动作就是经常用来做格式化文本的.使用方式跟c语言的printf差不多. 1,printf默认不会回车换行 ghostwu@dev:~ ...

  3. C语言字符串读入函数笔记

    gets(str)函数和scanf("%s",str)区别: 转自:https://zhidao.baidu.com/question/290403568.html 二者都是从终端 ...

  4. 获取url参数的方法(web)

    //获取url参数的方法(web) function GetQueryString(name) {     var reg = new RegExp("(^|&)" + n ...

  5. SD从零开始67-70 后勤信息系统中的标准分析, 信息结构, 信息的更新规则, 建立统计数据

    SD从零开始67 后勤信息系统中的标准分析 标准分析中的报表Reporting in Standard Analyses 标准分析为高质量的表达和分析LIS中的数据基础提供了大量的功能: 当你决定了一 ...

  6. 利用火车头采集A67手机电影教程一

    今天将讲述:利用火车头采集A67手机电影,并导入到网站中,如果你要更多更快的教程,请访问:http://www.it28.cn/category-191.html 现在以A67中的电影中的动作片为例: ...

  7. python自动化开发-9 进程 线程

    进程与线程 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一 ...

  8. Fiddler 使用fiddler发送捕获的请求及模拟服务器返回

    使用fiddler发送捕获的请求及模拟服务器返回 by:授客 QQ:1033553122 1.做好相关监听及代理设置 略 2.发送捕获的请求 如图 3.模拟服务器返回 本例的一个目的是,根据服务器返回 ...

  9. Cookie管理 WebView同步

    NoHttp的Cookie管理原理 在文档的初始化配置一章讲了NoHttp如何配置或者禁用cookie自动管理. NoHttp的Cookie自动维护,严格遵守Http协议,即区分临时Cookie和有效 ...

  10. (网页)javascript该如何学习?怎么样才能学好?

    文章摘抄自强哥文章   很多刚刚涉足软件开发的差不多都是只懂得HTMLCSS不懂得javascript,所以就想学习js,于是就从网上搜各种视频,或者买各种书籍回来看,很多时候都是浪费时间,因为根本看 ...