LeetCode:路径总和II【113】

题目描述

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

说明: 叶子节点是指没有子节点的节点。

示例:
给定如下二叉树,以及目标和 sum = 22

              5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1

返回:

[
[5,4,11,2],
[5,8,4,5]
]

题目分析

  首先是一个深度搜索,来把所有根节点到叶子节点的路径找出来,然后各自判断是否等于目标值,等于目标值的路径加入结果集中。这种思路是没有问题的,我也很快就写出来了,但是我总觉得递归结束条件太过于简单,但是如果不到叶子节点而中途结束的话,就会忽略一些测试案列。比如到某一节点已经等于目标值,但它不是叶子节点,然而还有可能它的叶子节点值为0对吧,那这也是一条路径,不能忽略。

Java题解

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> ans = new ArrayList<>();
DFS(ans,new ArrayList<>(),root,sum,sum);
return ans;
} public void DFS(List<List<Integer>> ans,List<Integer> tmpList,TreeNode node,int sum,int remain)
{
//递归结束条件
if(node==null)
return;
//业务逻辑处理
tmpList.add(node.val);
remain=remain-node.val;
if(remain==0&&node.left==null&&node.right==null){
ans.add(tmpList);
return;
}
DFS(ans,new ArrayList<>(tmpList),node.left,sum,remain);
DFS(ans,new ArrayList<>(tmpList),node.right,sum,remain);
}
}

  

最新文章

  1. css技巧收集
  2. 【BZOJ 1468】Tree 点分治
  3. 关于SVN代码提交粒度和频率的思考
  4. Poj-1088-滑雪
  5. SU suacor命令学习
  6. 颜色表及html代码
  7. 1.4.2 solr字段类型--(1.4.2.3)使用货币和汇率
  8. WGS84坐标系下,经纬度如何换算成米
  9. UI2_UITextField
  10. IT技术开发人员35岁之前应该做的十件事
  11. RedHat7搭建MongoDB集群
  12. ORACLE WIN7安装过程截图
  13. 转 图片缓存之内存缓存技术LruCache,软引用
  14. 如何编写一个gulp插件
  15. use vue vuex vue-router, not use webpack
  16. hive:框架理解
  17. 解决SVN一直弹出登录问题,eclipse.tmatesoft.com
  18. EF Core HasQueryFilter 的小坑
  19. 重要, 要播放音乐视频等多媒体: 安装fedora23中的多媒体编码器
  20. RxSwift学习笔记3:生命周期/订阅

热门文章

  1. Link-based Classification相关数据集
  2. 13 jsp include
  3. 第二百三十六节,Bootstrap辅组类和响应式工具
  4. 第一百四十二节,JavaScript,封装库--运动动画和透明度动画
  5. js 代码风格(2)
  6. 努比亚Z18mini多点对焦
  7. boost诊断工具BOOST_ASSERT、BOOST_VERIFY、BOOST_STATIC_ASSERT
  8. LINUX下搭建JAVA的开发环境
  9. tomcat报错-----》Unable to open debugger port IDEA Unable to open debugger port
  10. 酷壳用的还是 Wordpress