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

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

相关推荐
侠客行03177 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪7 小时前
深入浅出LangChain4J
java·langchain·llm
灰子学技术9 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
老毛肚9 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎9 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
二十雨辰9 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码9 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚9 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂9 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas1369 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript