class TreeNode {
int val;
TreeNode left, right;
TreeNode(int val) {
this.val = val;
}
}
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) return result;
List<Integer> current = new ArrayList<>();
dfs(root, targetSum, current, result);
return result;
}
private void dfs(
TreeNode node, int remaining,
List<Integer> current,
List<List<Integer>> result
) {
if (node == null) return;
current.add(node.val);
remaining -= node.val;
if (node.left == null && node.right == null && remaining == 0) {
result.add(new ArrayList<>(current));
} else {
dfs(node.left, remaining, current, result);
dfs(node.right, remaining, current, result);
}
current.remove(current.size() - 1);
}
}