路径总和 Ⅱ 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(); // 回溯重置,移除队尾节点
    }
}

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

相关推荐
oak隔壁找我8 小时前
JVM常用调优参数
java·后端
蝎子莱莱爱打怪12 小时前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
狼爷13 小时前
Go 没有 override?别硬套继承!用接口+嵌入,写更清爽的“覆盖”逻辑
java·go
小兔崽子去哪了16 小时前
Java 自动化部署
java·后端
ma_king16 小时前
入门 java 和 数据库
java·数据库·后端
后端AI实验室16 小时前
我用Cursor开发了3个月,整理出这套提效4倍的工作流
java·ai
码路飞20 小时前
GPT-5.3 Instant 终于学会好好说话了,顺手对比了下同天发布的 Gemini 3.1 Flash-Lite
java·javascript
SimonKing21 小时前
OpenCode AI编程助手如何添加Skills,优化项目!
java·后端·程序员
Seven971 天前
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
java
怒放吧德德1 天前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty