题解 | #复杂链表的复制#
二叉树中和为某一值的路径
http://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca
\别人的答案 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);***
}
}
OPPO公司福利 1091人发布