给你二叉树的根节点 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

思路

思路和LeetCode——112 路径总和(JAVA)大致相似,dfs搜索的终止条件在于当前结点是叶子结点,然后此时判断路径上的所有点权之和是否等于给定的targetSum,如果等于,将这条路加入最终的path(双层List嵌套)。

【注】一定要理解Java中一切皆对象的概念,也就是说,除了基本数据类型是值传递,其他都是地址传递。所以,在将当前路加入path中时,一定要new一个新对象,然后用for循环逐个将tempPath里的值给这个new出来的新对象才行(如果直接用等于号赋值,那么两个对象指向的是同一个内存地址)。

代码

public class Solution {public static class TreeNode {//为了方便本地调试调用内部类,我写了静态的//实际提交时可以不写TreeNode类int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}}ArrayList<Integer> tempPath = new ArrayList<Integer>();List<List<Integer>> path = new ArrayList<List<Integer>>();public void dfs(TreeNode root, int targetSum) {tempPath.add(root.val);if(root.left==null&&root.right==null) {//如果当前是叶子结点int sum = 0;for(int i=0;i<tempPath.size();i++) {sum += tempPath.get(i);}if(sum==targetSum) {ArrayList<Integer> tmp = new ArrayList<Integer>();//要new一个新对象来放//否则path里面的几次add都是添加的tempPath这同一个对象//因此当tempPath本身内容改变时,path里放进去的tempPath也会改变(引用传递,非值传递)for(int i=0;i<tempPath.size();i++) {tmp.add(tempPath.get(i));}path.add(tmp);}return;}if(root.left!=null) {dfs(root.left, targetSum);tempPath.remove(tempPath.size()-1);}if(root.right!=null) {dfs(root.right, targetSum);tempPath.remove(tempPath.size()-1);}}public List<List<Integer>> pathSum(TreeNode root, int targetSum) {if(root!=null) {dfs(root, targetSum);}return path;}
}

LeetCode——113 路径总和 II(JAVA)相关推荐

  1. Java实现 LeetCode 113 路径总和 II

    113. 路径总和 II 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = ...

  2. LeetCode 113. 路径总和 II(回溯)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉 ...

  3. leetcode 113. 路径总和 II

    难度:中等 频次:60 题目: 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径. 叶子节点 是指没有子节点的节点. 解 ...

  4. 54. Leetcode 113. 路径总和 II (二叉树-二叉树路径和)

    给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径.叶子节点 是指没有子节点的节点.示例 1: 输入:root = [5, ...

  5. leetcode 113. 路径总和 II(Path Sum II)

    目录 题目描述: 示例: 解法: 题目描述: 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及 ...

  6. Leetcode 113. 路径总和 II 解题思路及C++实现

    解题思路: 典型的深度优先搜索或回溯法的问题. /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNo ...

  7. LeetCode 112. 路径总和 、113. 路径总和 II 思考分析

    目录 112. 路径总和 题目 递归解 递归解,其他人的解法 迭代解,其他人的解法 113. 路径总和 II 题目 递归解 递归解,参考别人的思路 112. 路径总和 题目 给定一个二叉树和一个目标和 ...

  8. 113. 路径总和 II golang

    113. 路径总和 II 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = ...

  9. 【Leetcode】113. 路径总和 II

    给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22, 5         ...

最新文章

  1. 什么是Python?好学吗?
  2. 苏黎世联邦理工学院SML课题组招收统计机器学习全奖博士生
  3. CentOS下Redis安装配置小结
  4. 交叉熵损失函数分类_交叉熵损失函数
  5. RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践
  6. 如何设置WebLogic生成的日志文件的权限?
  7. python去除图像光照不均匀_CVPR 2020 | 从重建质量到感知质量:用于低光照增强的半监督学习方法...
  8. 大数据分析必须要会的数据预处理操作(二)!!!
  9. python不用中间变量交换值_不使用中间变量,交换int型的 a, b两个变量的值。
  10. 关于DHCP超级域与中继代理的疑问
  11. Apache Hadoop 源码阅读(陆续更新)
  12. windows源码安装apache2 win安装apache 阿帕奇服务器
  13. 区块链基础语言(二十)——Go语言结构体
  14. 【ICLR2021】伪标签还能这样用?半监督力作UPS大揭秘!
  15. 21.卷1(套接字联网API)---多播
  16. justify-content
  17. 项目管理系统--设计篇--第五篇
  18. lnmp 一键安装
  19. Elasticsearch实战 | 必要的时候,还得空间换时间!
  20. 使用SQL管理数据库

热门文章

  1. 苹果手机之间如何互传照片?批量传输操作指南
  2. jenkins:常用bat命令(八)
  3. IELTS分数评估-对了30道题得7分
  4. 如何安全地使用锂电池
  5. r7 4800H和i7-9750H 性能对比评测
  6. x264 aq-mode aq-strength详解
  7. 地平线旭日X3派小白上手
  8. 奥运过后只有五种人才可以买房
  9. oninput 事件- 输入提示-纯函数
  10. Charles手机抓包工具使用实践