题目链接:

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相关推荐

  1. 【leetcode-DFS】求根节点到叶节点数字之和/二叉树的最大路径和/路径总和/左叶子之和/树的直径

    文章目录 求根节点到叶节点数字之和 深度优先搜索 广度优先搜索 二叉树的最大路径和 DFS 路径总和1 深度优先搜索 广度优先搜索 路径总和2 回溯法 广度优先搜索 左叶子之和 递归 DFS 树的直径 ...

  2. spring Java相对路径/绝对路径总结

    原文出处:http://www.233.com/Java/zhuanye/20101108/13463331-2.html 下面是一些得到classpath和当前类的绝对路径的一些方法.你可能需要使用 ...

  3. Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略

    Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...

  4. Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略

    Python语言学习:创建/删除文件/文件夹.获取当前文件/文件夹路径(系统环境路径/目录).获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略 目录 系统环境路径的设置 1.sys ...

  5. 路径包含空格_5分钟学会:矢量工具与路径-编辑路径

    使用钢笔工具绘图或者描摹对象的轮廓时,有时不能一次就绘制准确,而是需要在绘制完成后通过对锚点和路径的编辑来达到目的.下面来学习如何编辑锚点和路径. 1.选择与移动锚点.路径段和路径 选择锚点.路径段和 ...

  6. logback-spring.xml 文件路径 相对路径_小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. 迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法)

    迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法) 1.0版 #include <iostream> using namespace std;const int max ...

  8. servlet获取相对路径 绝对路径

    servlet获取相对路径 绝对路径 转载于:https://www.cnblogs.com/hfultrastrong/p/8168016.html

  9. linux history操作的路径,绝对路径和相对路径,目录命令(cd,mkdir,rm,history)

    绝对路径和相对路径 绝对路径是以/(根)开头的 [root@aminglinux-02 ~]# ls /etc/hostname /etc/hostname 相对路劲是相对当前目录的路径 [root@ ...

  10. JAVA File的创建及相对路径绝对路径

    JAVA File的创建及相对路径绝对路径 转载自 http://blog.sina.com.cn/s/blog_9386f17b0100w2vv.html File f = new File(&qu ...

最新文章

  1. 559.N叉树的最大深度
  2. Java学习之数据类型
  3. git fetch和git pull
  4. percona innobackupex 使用
  5. 日常生活小技巧 -- 名词
  6. Spring集成Memcached三种方式(一)
  7. mysql(mariadb)重装
  8. PHP(2):搭建PHP 运行环境中可能出现的问题及处理方法
  9. 别乱用,这样打日志定位 Bug 又快又准!
  10. linux下实现对多个文件去重软件,Linux下大文件的排序和去重复
  11. div和div之间画横线,如何在两个div之间画一条线?
  12. 本质矩阵 基础矩阵 单应矩阵 (3)
  13. Docker 部署Dotnet Core MVC项目
  14. 汝跟被升职者之间,不存在竞争关系
  15. 最新微信公众平台源码
  16. html 图片下载浏览器默认会打开新页面预览图片解决方案
  17. 【环境配置】octopus + dirt--ubuntu18.04
  18. AIR应用:二维码批量生成
  19. 2018铁三测评题write以及一些想送给你们的话
  20. 【火炉炼AI】机器学习023-使用层次聚类算法构建模型

热门文章

  1. 计量实证-PSM-DID教程、代码及数据分享
  2. chmod 权限777 -rwxrwxrwx是什么意思
  3. 线性回归 假设_违反线性回归假设的后果
  4. Glib之GObject简介(翻译)
  5. SWAPIDC服务器销售模板,记录利用swapidc搭建IDC销售网站教程
  6. IDC:未来中国MES市场仍将快速发展分化
  7. springboot2 集成shiro-spring-boot-web-starter
  8. Unity5.3官方VR教程重磅登场-系列6 VR真机测试和产品发布
  9. 【原】移动web资源整理
  10. 60佳灵感来自大自然的网页设计作品欣赏