import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ public class Solution { /** * * @param root TreeNode类 * @param sum int整型 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) { ArrayList<ArrayList<Integer>> result = new ArrayList<>(); ArrayList<Integer> list = new ArrayList<>(); preTree(root, sum, list, result); return result; } public void preTree(TreeNode root, int sum, ArrayList<Integer> list, ArrayList<ArrayList<Integer>> result){ if (root == null) { return; } /** * 这里为什么不能这样写: * 如果树中的每个节点都是正整数 那没有问题 * 如果树中都是是负数或者有负有正 那就有问题了 */ // if ((sum - root.val) < 0) { // return; // } if (root.left == null && root.right == null && (sum - root.val) == 0) { list.add(root.val); result.add(new ArrayList(list)); list.remove(list.size()-1); return; } list.add(root.val); preTree(root.left, sum - root.val, list, result); preTree(root.right, sum - root.val, list, result); list.remove(list.size()-1); } }