113. 路径总和 II
题解:先存储路径上的节点,通过递归到最底层,通过条件判断是否是叶节点以及是否满足target值,如果满足条件,则将集合存入到ansList中,切记此处不可直接返回,必须经过回溯。
class Solution {
private Deque<Integer> nodeDequeue=new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> ansList=new ArrayList<>();
getPathSum(root,ansList,targetSum);
return ansList;
}
public void getPathSum(TreeNode root,List<List<Integer>> ansList,int targetSum){
//空节点直接返回
if(root==null){
return;
}
//减去当前节点的值
targetSum-=root.val;
//存储路径中的节点
nodeDequeue.offerLast(root.val);
//叶节点,比较target
if(root.left==null&&root.right==null&&targetSum==0){
ansList.add(new ArrayList<>(nodeDequeue));
//切记此处不可直接返回,直接返回会导致存储节点的集合与实际情况不一致,因为没有回溯
}
getPathSum(root.left,ansList,targetSum);
getPathSum(root.right,ansList,targetSum);
//节点回溯
nodeDequeue.pollLast();
}
}