搜索回溯算法
有个坑:res.add(new LinkedList<>(list));
为什么要new呢,因为是引用类型。
public class Solution {
List<List<Integer>> res;
public List<List<Integer>> pathSum(TreeNode root, int sum) {
res = new LinkedList<>();
if (root == null) return res;
// 根节点不为空
LinkedList<Integer> list = new LinkedList<>();
trace(root, sum, list);
return res;
}
public void trace(TreeNode node, int sum, List<Integer> list) {
list.add(node.val);
if (node.left == null && node.right == null && node.val == sum) {
res.add(new LinkedList<>(list));
}
if (node.left != null) trace(node.left, sum - node.val, list);
if (node.right != null) trace(node.right, sum - node.val, list);
list.remove(list.size() - 1);
}
}