给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

叶子节点 是指没有子节点的节点。

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:
输入:root = [1,2], targetSum = 0
输出:[]

提示:

树中节点总数在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000

这道题其实比较好做的,但是需要打破前几道回溯算法那样的思路,开始就说过回溯类的题目都可以写成N叉树的形式,这个正好又是二叉树,所以就很简单了;

开始想到了for循环是不用写的,只需要分别递归左右子树就可以了,
且遍历到叶子节点时,如果路径所有节点和和targetSum相等,这条路径就是答案;

但是写出来发现了一个问题,当判断出来叶子节点后,此时的路径path并没有将叶子节点加进去,sum也一样,所以我就单独在结束时又加了一遍并回溯结束,这样就可以了;

而且当root节点为空时也需要判断,这个要写在判断叶子节点下面;
写在下面也面临一个问题就是叶子节点不能直接判断,所以我又通过一个函数来判断叶子节点;

详细注释代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {public:vector<vector<int>> ans;vector<int> path;int sum = 0;void backTracking(TreeNode *root, int targetSum) {//判断是否为叶子节点if (isLeafnode(root)) {//为叶子节点,此时sum还没有加上叶子节点的值,所以先加上叶子节点val看看是否和//targetSum相等,如果相等,则将最后一个节点就是叶子节点压入path,此时path就是//答案之一,把path加入ans,然后回溯将这个叶子节点再从path里拿出来if (sum + root -> val == targetSum) {path.push_back(root -> val);ans.push_back(path);path.pop_back();}return ;}//这个判断是为了保证节点不为空if (!root) return ;sum += root -> val;path.push_back(root -> val);backTracking(root -> left, targetSum);//向下递归左子树backTracking(root -> right, targetSum);//向下递归右子树path.pop_back();//回溯sum -= root -> val;//回溯}//判断节点是否为叶子节点bool isLeafnode(TreeNode* root) {if (!root) return false;if (!root -> left && !root -> right) return true;return false;}vector<vector<int>> pathSum(TreeNode* root, int targetSum) {if (!root) return ans;backTracking(root, targetSum);return ans;}
};

113. 路径总和 (剑指 Offer 34. 二叉树中和为某一值的路径)(回溯算法)相关推荐

  1. 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径

    [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...

  2. 剑指 Offer 34. 二叉树中和为某一值的路径【附完整可运行代码】

    立志用最少的代码做最高效的表达 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和 ...

  3. 小黑除夕跟尚香吃喜茶喝火锅,走了一下午,晚上休息会儿顺便的leetcode之旅:剑指 Offer 34. 二叉树中和为某一值的路径

    小黑代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, r ...

  4. 剑指offer:二叉树中和为某一值的路径

    题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 分析:路径定义为从树的根结点开始往下一直到叶结点 ...

  5. 剑指offe题解(二叉树中和为某一值的路径)

    题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  6. 剑指offer:面试题34. 二叉树中和为某一值的路径

    题目:二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和  ...

  7. 剑指offer面试题34. 二叉树中和为某一值的路径(先序遍历)(回溯)

    题目描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 思路 详见链接 代码 class Solution:def ...

  8. 剑指Offer之二叉树中的和为某一路径的值

    题目 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数 ...

  9. 【LRD,DLR】BST的后续遍历序列,二叉树中和为某一值的路径

    D是Degree,后续遍历就是LRD,前序遍历就是DLR. 面试题33:BST的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false. ...

最新文章

  1. 学习ExtJS4 常用控件
  2. 12.PDE与PTE
  3. mysqli 返回一条结果_php中mysqli 处理查询结果集总结
  4. 认识与设计Serverless(二)
  5. wdcp-apache开启KeepAlive提高响应速度
  6. bootstrap下拉框分页_【Bootstrap】 bootstrap-select2下拉菜单插件
  7. 算法高级(12)-分布式系统常见负载均衡算法
  8. 微软以白金会员加入 OpenChain 开源组织
  9. azure云数据库_Azure SQL数据库中的高级数据安全性–数据发现和分类
  10. 最新型号设备信息对照表_所有iPhone设备都可能被解锁!黑客发布新款越狱软件“Unc0ver”...
  11. 实战Swiper:利用Swiper制作手机新闻界面
  12. 20套初级javaweb项目开发案例(适合小白)
  13. 使用STAR构建参考基因组并比对
  14. Excel·VBA考勤打卡记录统计出勤小时
  15. Codevs 3322 时空跳跃者的困境(组合数 二项式定理)
  16. Android常用第三方支付
  17. 带宽、吞吐量与线速的关系(转载)
  18. 实例:用C#.NET手把手教你做微信公众号开发(19)--使用微信支付转账到微信粉丝零钱账户
  19. 学校网站建设解决方案_学校网站建设方案怎么写
  20. Mac Mini2018 开箱(视频)全球首映!Kindle 开箱一并奉上(文字)

热门文章

  1. java对象重用_JAVA:避免重复的创建对象
  2. 残缺棋盘的伪代码_伪激光雷达:无人驾驶的立体视觉
  3. flyway java使用,如何使用flyway创建数据库?
  4. java 反射模式_java 设计模式——反射机制的应用
  5. 数据中心的PUE 最低可至1.15,浸没式液冷技术是关键
  6. IDC干货:5个维度!全面综合分析我国城市数据中心发展情况
  7. cocos2dx 调用oc java_cocos2dx 调用浏览器打开网址
  8. tcp udp区别优缺点_Linux网络编程面试题--tcp和udp的区别
  9. Competition——AI:国内外人工智能比赛平台以及竞赛类型、竞赛题目、举行时间等之详细攻略(最全+ing)
  10. ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性