import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
/**
*
* @param root TreeNode类
* @param sum int整型
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
if (root == null) {
return result;
}
ArrayList<Integer> list = new ArrayList<Integer>();
treeDeep(root, sum, list);
return result;
}
public void treeDeep (TreeNode root, int sum, ArrayList<Integer> list) {
if (root == null) {
return;
}
//不能这么写 因为有可能整棵树都是负数 要求的sum也是负数
// if (sum < 0) {
// return;
// }
if (root.left == null && root.right == null && sum - root.val == 0) {
list.add(root.val);
result.add(new ArrayList(list));
//如示例中的二叉树 如sum=10时 541 此时遍历到4的左孩子1叶子节点后,应把1擦除,接着遍历4的右孩子 看是否有路径满足sum=10的
list.remove(list.size() - 1);
return;
}
list.add(root.val);
treeDeep (root.left, sum - root.val, list);
treeDeep (root.right, sum - root.val, list);
//这里的擦除 如sum=11 当遍历到1时 不满足sum=11 此时 应擦除1 接着遍历4的右孩子到叶节点 看是否有满足的
list.remove(list.size() - 1);
}
}