package com.wsq.tree;
import java.util.ArrayList;
import java.util.List;
class TreeNode {
Integer val;
TreeNode left;
TreeNode right;
TreeNode(Integer x) { val = x; }
}
public class PathSum {
private List<List<Integer>> ansList = new ArrayList();
private List<Integer> pathList = new ArrayList();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
dfs(root, sum);
return ansList;
}
private void dfs(TreeNode root, int sum) {
if(root == null) {
return;
}
pathList.add(root.val);
int nextSum = sum - root.val;
if(nextSum == 0 && root.left == null && root.right == null) {
ansList.add(new ArrayList<>(pathList));
}else {
dfs(root.left, nextSum);
dfs(root.right, nextSum);
}
pathList.remove(pathList.size() - 1);
}
public static TreeNode buildTree(Integer[] a, int pos) {
if(pos >= a.length || a[pos] == null) {
return null;
}
TreeNode root = new TreeNode(a[pos]);
root.left = buildTree(a, 2 * pos + 1);
root.right = buildTree(a, 2 * pos + 2);
return root;
}
public static void main(String[] args) {
Integer[] a = {1,-2,-3,1,3,-2,null,-1};
TreeNode root = buildTree(a, 0);
int sum = -1;
PathSum ps = new PathSum();
List<List<Integer>> ans = ps.pathSum(root, sum);
for(List<Integer> list: ans) {
for(Integer i: list) {
System.out.print(i + " ");
}
System.out.println();
}
}
}