思路递归+回溯。
代码如下:
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
public class lc113 {
List<List<Integer>> ans = new LinkedList<>();
Deque<Integer> deque = new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
if(root==null) return ans;
deque.addLast(root.val);
priorOrder(root,0,sum);
return ans;
}
public void priorOrder(TreeNode node,int count,int sum) {
int c = count + node.val;
if (node.left == null && node.right == null && (sum == c)) {
ans.add(new LinkedList<>(deque));
return;
}
if(node.left!=null){
deque.addLast(node.left.val);
priorOrder(node.left, c, sum);
deque.pollLast();
}
if(node.right!=null){
deque.addLast(node.right.val);
priorOrder(node.right, c, sum);
deque.pollLast();
}
}
}
priorOrder 中的回溯还可以继续优化一下。