用深度遍历的方法找出每一条路径,看看和是否是目标值。
class Solution {
Deque<Integer> queue = new LinkedList<Integer>();
List<List<Integer>> res = new LinkedList<List<Integer>>();
public List<List<Integer>> pathSum(TreeNode root, int target) {
dfs(root, target);
return res;
}
public void dfs(TreeNode root, int target){
if(root == null){
return;
}
queue.offerLast(root.val);
target = target - root.val;
if(root.left == null && root.right == null && target == 0){
res.add(new LinkedList<>(queue));
}
dfs(root.left, target);
dfs(root.right, target);
queue.pollLast();
}
}
采用递归的方法深度遍历,创建一个返回值类型List<List<Integer>>() res,再创建一个双端队列来记录路径,添加节点和删除节点都在双端队列的末尾进行,如果路径是对的,把这个双端队列添加到res里面。当把一个节点的下面所有路径都走完了,把这个节点移出对列,最后返回res。