\别人的答案 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);***
}
}


京公网安备 11010502036488号