题目描述:
解题思路:
就是用dfs+回溯解的,定义全局变量,把节点的值加到一块,判断当到叶子节点并且sum等于给定值的时候添加到结果集里,然后回溯。这里需要注意List add List的时候,不能直接add(list),需要再重新实例化一次,不然添加进去的都是同一个地址,导致结果为空。
参考代码:
List<List<Integer>> res=new ArrayList<>();
int tempsum=0;
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<Integer> list=new ArrayList<>();
dfs(root,list,sum);
return res;
}
void dfs(TreeNode root,List<Integer> list,int sum) {
if(root==null)
return;
list.add(root.val);
tempsum+=root.val;
if(tempsum==sum&&root.left==null&&root.right==null)
res.add(new ArrayList<>(list));//注意这里要实例化list再添加
dfs(root.left,list,sum);
dfs(root.right,list,sum);
//回溯
tempsum-=root.val;
list.remove(list.size()-1);
}