路径总和 Ⅱ Java

java 复制代码
public class 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;
	}
}

class Solution {
	public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        List<List<Integer>> list = new ArrayList();
        List<Integer> tempList = new ArrayList(); // 存放符合条件的节点
        dfs(list, tempList, root, targetSum);
        return list;
	}
    static void dfs(List<List<Integer>> list, List<Integer> tempList, TreeNode root, int targetSum) {
        if (root == null) return;
        targetSum -= root.val; // 减去该节点
        tempList.add(root.val); // 将当前节点加入tempList 
        if (root.left == null && root.right == null && targetSum == 0) list.add(new ArrayList(tempList)); // 判断是否为叶子节点,如果累积减去的值等于目标值则将tempList创建副本添加到list,一定要创建副本再存入防止tempList改变影响到list
        dfs(list, tempList, root.left, targetSum);
        dfs(list, tempList, root.right, targetSum);
        tempList.remove(tempList.size() - 1); // 回溯重置状态,撤回当前节点的存入
    }
}

或者用队列:

java 复制代码
class Solution {
	public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        List<List<Integer>> list = new ArrayList();
        Deque<Integer> tempList = new LinkedList();
        dfs(list, tempList, root, targetSum);
        return list;
	}
    static void dfs(List<List<Integer>> list, Deque<Integer> tempList, TreeNode root, int targetSum) {
        if (root == null) return;
        targetSum -= root.val;
        tempList.offerLast(root.val); // 当前节点添加到队尾
        if (root.left == null && root.right == null && targetSum == 0) list.add(new LinkedList(tempList));
        dfs(list, tempList, root.left, targetSum);
        dfs(list, tempList, root.right, targetSum);
        tempList.pollLast(); // 回溯重置,移除队尾节点
    }
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

相关推荐
feiyangqingyun16 分钟前
Qt项目作品在苹果macos上编译运行效果/视频监控系统/物联网平台等
开发语言·qt·macos
GL-Yang1 小时前
2025年-集合类面试题
java·面试
你不是我我1 小时前
【Java 开发日记】我们来说一说 Redisson 的原理
java·开发语言
kk”1 小时前
C++ stack 和 queue
开发语言·c++
Matlab仿真实验室1 小时前
基于Matlab实现双目图计算深度图
开发语言·数码相机·matlab·双目图计算深度图
李憨憨1 小时前
Java处理大型 Excel 文件(超过 100 万行)难题
java
QT 小鲜肉1 小时前
【数据结构与算法基础】05. 栈详解(C++ 实战)
开发语言·数据结构·c++·笔记·学习·算法·学习方法
2401_840105201 小时前
P1049 装箱问题 题解(四种方法)附DP和DFS的对比
c++·算法·深度优先·动态规划
老K的Java兵器库2 小时前
Collections 工具类 15 个常用方法源码:sort、binarySearch、reverse、shuffle、unmodifiableXxx
java·开发语言·哈希算法
武子康2 小时前
Java-153 深入浅出 MongoDB 全面的适用场景分析与选型指南 场景应用指南
java·开发语言·数据库·mongodb·性能优化·系统架构·nosql