015.路径总和 路径总和II
题目链接:
112. 路径总和
113. 路径总和 II
路径总和:
题目要求:
判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum
。如果存在,返回 true
;否则,返回 false
。
思路:
把targetSum
一开始就输入进来,然后遍历的过程中,不断减去经过节点的值,如果到叶子节点targetSum
== 0,代表这条路径的节点之和加起来等于 targetSum
,
然后返回true,然后把这个ture不断向上传递就好。
递归三部曲:
1.确定递归函数参数和返回类型:
参数树节点,返回类型布尔值。
bool traversal(treenode* cur, int count) // 注意函数的返回类型
2.明确终止条件:
遇见叶子节点,判断
targetSum
是否等于0,等于0返回ture。
if (!cur->left && !cur->right && count == 0) return true; // 遇到叶子节点,并且计数为0
if (!cur->left && !cur->right) return false; // 遇到叶子节点而没有找到合适的边,直接返回
3.确定递归单层逻辑:
顺便一个递归顺序,在递归代码上套两层if,第一层防止左右指针是否指向空,第二层判断下面一层递归传上的是不是true,好一路向上返回。然后结束。
向下递归的过程中记得用targetSum
减当前节点的值,而且在递归返回的过程中记得回溯。
if (cur->left) { // 左count -= cur->left->val; // 递归,处理节点;if (traversal(cur->left, count)) return true;count += cur->left->val; // 回溯,撤销处理结果
}
if (cur->right) { // 右count -= cur->right->val;if (traversal(cur->right, count)) return true;count += cur->right->val;
}
return false;
4.总代码:
class Solution {
private:bool traversal(TreeNode* cur, int count) {if (!cur->left && !cur->right && count == 0) return true; // 遇到叶子节点,并且计数为0if (!cur->left && !cur->right) return false; // 遇到叶子节点直接返回if (cur->left) { // 左count -= cur->left->val; // 递归,处理节点;if (traversal(cur->left, count)) return true;count += cur->left->val; // 回溯,撤销处理结果}if (cur->right) { // 右count -= cur->right->val; // 递归,处理节点;if (traversal(cur->right, count)) return true;count += cur->right->val; // 回溯,撤销处理结果}return false;}public:bool hasPathSum(TreeNode* root, int sum) {if (root == NULL) return false;return traversal(root, sum - root->val);}
};
路径总和II思路:
题目要求:
找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
思路:
在路径总和思想的基础上,去掉和返回true有关的逻辑,然后用一个数组存储遍历的路径(不是要求的路径不会加进去,看代码就知道了),一个数组当结果集返回,在符合路径总和(不是||)题目要求的情况下,把储存数组输入到结果集里去。
总代码:
注意数组要提前声明,以及“清空”。(记得先把根节点加到路径里)
class solution {
private:vector<vector<int>> result;vector<int> path;// 递归函数不需要返回值,因为我们要遍历整个树void traversal(treenode* cur, int count) {if (!cur->left && !cur->right && count == 0) { // 遇到了叶子节点且找到了和为sum的路径result.push_back(path);return;}if (!cur->left && !cur->right) return ; // 遇到叶子节点而没有找到合适的边,直接返回if (cur->left) { // 左 (空节点不遍历)path.push_back(cur->left->val);count -= cur->left->val;traversal(cur->left, count); // 递归count += cur->left->val; // 回溯path.pop_back(); // 回溯}if (cur->right) { // 右 (空节点不遍历)path.push_back(cur->right->val);count -= cur->right->val;traversal(cur->right, count); // 递归count += cur->right->val; // 回溯path.pop_back(); // 回溯}return ;}public:vector<vector<int>> pathsum(treenode* root, int sum) {result.clear();path.clear();if (root == null) return result;path.push_back(root->val); // 把根节点放进路径traversal(root, sum - root->val);return result;}
};
遇见的问题:
叶子判断本节点返回,递归却减下一层递归节点的值?
理由是5-4-11-2,四个节点,只有三个步骤。
个人想法:
这什么鬼字体,力扣上的字体形态会被复制,然后后面的字也跟着是....关键还不知道是什么字体。
015.路径总和 路径总和II相关推荐
- 【leetcode-DFS】求根节点到叶节点数字之和/二叉树的最大路径和/路径总和/左叶子之和/树的直径
文章目录 求根节点到叶节点数字之和 深度优先搜索 广度优先搜索 二叉树的最大路径和 DFS 路径总和1 深度优先搜索 广度优先搜索 路径总和2 回溯法 广度优先搜索 左叶子之和 递归 DFS 树的直径 ...
- spring Java相对路径/绝对路径总结
原文出处:http://www.233.com/Java/zhuanye/20101108/13463331-2.html 下面是一些得到classpath和当前类的绝对路径的一些方法.你可能需要使用 ...
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...
- Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略
Python语言学习:创建/删除文件/文件夹.获取当前文件/文件夹路径(系统环境路径/目录).获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略 目录 系统环境路径的设置 1.sys ...
- 路径包含空格_5分钟学会:矢量工具与路径-编辑路径
使用钢笔工具绘图或者描摹对象的轮廓时,有时不能一次就绘制准确,而是需要在绘制完成后通过对锚点和路径的编辑来达到目的.下面来学习如何编辑锚点和路径. 1.选择与移动锚点.路径段和路径 选择锚点.路径段和 ...
- logback-spring.xml 文件路径 相对路径_小白学 Python(18):基础文件操作
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法)
迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法) 1.0版 #include <iostream> using namespace std;const int max ...
- servlet获取相对路径 绝对路径
servlet获取相对路径 绝对路径 转载于:https://www.cnblogs.com/hfultrastrong/p/8168016.html
- linux history操作的路径,绝对路径和相对路径,目录命令(cd,mkdir,rm,history)
绝对路径和相对路径 绝对路径是以/(根)开头的 [root@aminglinux-02 ~]# ls /etc/hostname /etc/hostname 相对路劲是相对当前目录的路径 [root@ ...
- JAVA File的创建及相对路径绝对路径
JAVA File的创建及相对路径绝对路径 转载自 http://blog.sina.com.cn/s/blog_9386f17b0100w2vv.html File f = new File(&qu ...
最新文章
- 559.N叉树的最大深度
- Java学习之数据类型
- git fetch和git pull
- percona innobackupex 使用
- 日常生活小技巧 -- 名词
- Spring集成Memcached三种方式(一)
- mysql(mariadb)重装
- PHP(2):搭建PHP 运行环境中可能出现的问题及处理方法
- 别乱用,这样打日志定位 Bug 又快又准!
- linux下实现对多个文件去重软件,Linux下大文件的排序和去重复
- div和div之间画横线,如何在两个div之间画一条线?
- 本质矩阵 基础矩阵 单应矩阵 (3)
- Docker 部署Dotnet Core MVC项目
- 汝跟被升职者之间,不存在竞争关系
- 最新微信公众平台源码
- html 图片下载浏览器默认会打开新页面预览图片解决方案
- 【环境配置】octopus + dirt--ubuntu18.04
- AIR应用:二维码批量生成
- 2018铁三测评题write以及一些想送给你们的话
- 【火炉炼AI】机器学习023-使用层次聚类算法构建模型