Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:Given the below binary tree and
sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
跟前面的Path Sum 问题类似。之前是判断是否存在这样的路径。现在是要求将所有这样的路径找出来。
典型的深度优先遍历搜索问题。
控制的条件跟之前一样,额外增加存储路径步骤。
运行时间
代码:
public class PathSumII {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> store = new ArrayList<>();
if (root == null) {
return store;
}
doPathSum(store, new ArrayList<>(), root, sum);
return store;
}
private void doPathSum(List<List<Integer>> store, List<Integer> curList, TreeNode root, int sum) {
if (root.left == null && root.right == null) {
if (root.val != sum) {
return;
}
List<Integer> temp = new ArrayList<>(curList);
temp.add(root.val);
store.add(temp);
return;
}
curList.add(root.val);
if (root.left != null) {
doPathSum(store, curList, root.left, sum - root.val);
}
if (root.right != null) {
doPathSum(store, curList, root.right, sum - root.val);
}
curList.remove(curList.size() - 1);
}
}