import java.util.*; public class Solution { // 存储目标路径 private static ArrayList<ArrayList<Integer>> res = new ArrayList<>(); // 拼接当前路径 private static LinkedList<Integer> path = new LinkedList<>(); public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int targetSum) { // 预处理 if (root == null) return res; // 使用深度优先搜索查找整棵树 dfs(root, targetSum); // 返回结果集 return res; } // 深度优先搜索查找目标路径 public static void dfs(TreeNode root, int targetSum) { // 预处理 if (root == null) return; // 更新当前路径和目标值 path.add(root.val); targetSum -= root.val; // 如果当前结点为叶子结点且已经达到了目标和 if (isLeaf(root) && targetSum == 0) { // 记录当前路径 res.add(new ArrayList<>(path)); } // 递归查找其左右子树 dfs(root.left, targetSum); dfs(root.right, targetSum); // 回溯 path.removeLast(); } // 判断当前结点是否为叶子结点 public static boolean isLeaf(TreeNode node) { // 预处理 if (node == null) return false; // 当前结点没有左右结点即为叶子结点 return node.left == null && node.right == null; } }