\别人的答案 copy过来的 写下来主要是因为 对list要消除最后一个而sum不用消除的疑惑
因为int 是基本类型,其值在递归的栈中不同,而list在栈中存的是地址,所以其内容要手动修改!!
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) { ans = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> list = new ArrayList<>(); solve(root, target, 0, list); return ans; } private ArrayList<ArrayList<Integer>> ans; private void solve(TreeNode node, int target, int sum, ArrayList<Integer> list) { if (node != null) { sum += node.val; list.add(node.val); if (node.left == null && node.right == null) { if (sum == target) { ArrayList<Integer> res = new ArrayList<>(list); // ArrayList是引用传递 ans.add(res); } } else { solve(node.left, target, sum, list); // 递归左子树 solve(node.right, target, sum, list); // 递归右子树 } // 消除掉当前节点对查找路径的影响 --> 至关重要 ***list.remove(list.size() - 1);*** } }