leetcode 112. Path Sum 、 113. Path Sum II 、437. Path Sum III
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的更多相关文章
- 记录我的 python 学习历程-Day13 匿名函数、内置函数 II、闭包
一.匿名函数 以后面试或者工作中经常用匿名函数 lambda,也叫一句话函数. 课上练习: # 正常函数: def func(a, b): return a + b print(func(4, 6)) ...
- 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 ...
- leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...
- 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:二叉树下的不能相邻,求能 ...
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- lintcode 787. The Maze 、788. The Maze II 、
787. The Maze https://www.cnblogs.com/grandyang/p/6381458.html 与number of island不一样,递归的函数返回值是bool,不是 ...
- 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串
第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...
- 【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)
总述 全部用DFS来做 重点一:参数的设置:为Root,路径字符串,路径List集合. 重点二:步骤: 1 节点为null 2 所有节点的操作 3 叶子结点的操作 4 非叶节点的操作 题目257. 二 ...
- [LeetCode] #112 #113 #437 Path Sum Series
首先要说明二叉树的问题就是用递归来做,基本没有其他方法,因为这数据结构基本只能用递归遍历,不要把事情想复杂了. #112 Path Sum 原题链接:https://leetcode.com/prob ...
随机推荐
- [android] 手机卫士绑定sim卡
更新: 收不到启动广播,查看知乎,好像是说高版本的系统都禁止了 还可以通过adb发送开机广播 adb shell am broadcast -a android.intent.action.BOOT_ ...
- Java入门 第10天 ,理解数组
数组的特点: 1.内容的类型固定,不会int String 两个类型一起,要么是int类型 要么是String类型 或者其他类型. 2.长度是固定的,例:String [ ] myArray = ...
- canvas学习和滤镜实现
最近学习了 HTML5 中的重头戏--canvas.利用 canvas,前端人员可以很轻松地.进行图像处理.其 API 繁多,这次主要学习常用的 API,并且完成以下两个代码: 实现去色滤镜 实现负色 ...
- MEF 插件式开发之 DotNetCore 初体验
背景叙述 在传统的基于 .Net Framework 框架下进行的 MEF 开发,大多是使用 MEF 1,对应的命名空间是 System.ComponentModel.Composition.在 Do ...
- 我的Java之旅 第七课 JAVA WEB 会话管理
1.隐藏域 隐藏域其实不是Servlet/JSP的会话管理机制的内容,但它能实现简单的页面状态记录的效果. 2.Cookie Cookie类 setMaxAge() 设置有效期 ...
- MVP模式及性能优化
1.base BaseActivity public abstract class BaseActivity<V,P extends BasePresenter<V>>exte ...
- 对JavaScript中闭包的理解
在前端开发中闭包是一个很重要的知识点,是面试中一定会被问到的内容.之前我对闭包的理解主要是"通过闭包可以在函数外部能访问到函数内部的变量",对闭包运用的也很少,甚至自己写过闭包自己 ...
- Linux 硬盘格式化、分区、挂载、卸载、删除分区,Linux重新调整分区
目录 Linux 硬盘格式化.分区.挂载.卸载.删除分区 0. 查看挂载情况 1. 查看硬盘信息 2. 创建分区 3. 查看磁盘信息 4. 格式化分区 5. 将分区信息写入fstab, 设置开机自动挂 ...
- python第九十六天 ---Django(1)
django 模块 一 安装: pip3 install django 或 python -m pip install django 二 添加环境变量 相关命令: #cmd 下 django-ad ...
- 计算机硬件基本知识及Linux的常用命令
------------------1. 计算机硬件基本知识------------------ CPU - 寄存器 - L1/L2/L3 - 内存 - 硬盘 - 互联网下载/其他存储介质传输 寄存器 ...