题目分析
- 此题dfs终止的条件是,到达叶子节点,但是找到节点的条件还要是remain为0
Solution
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> list = new ArrayList<>();
if (root == null)
return list;
dfs(root, sum, new ArrayList<>(), list);
return list;
}
private void dfs(TreeNode node, int remain, List<Integer> nums, List<List<Integer>> list) {
if (node == null)
return;
remain -= node.val;
nums.add(node.val);
// 会有可能出现到达叶子节点,但是remain 不为0
// 只有当到达叶子节点并且remain为0时,才为解
if (node.left == null && node.right == null) {
if (remain == 0)
// 需要创建新list对象
list.add(new ArrayList<>(nums));
} else {
dfs(node.left, remain, nums, list);
dfs(node.right, remain, nums, list);
}
nums.remove(nums.size() - 1);
}
}
Reference:小码哥MJ