路径总和 II
路径总和 II
https://leetcode.cn/problems/path-sum-ii/submissions/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
private static List<List<Integer>> listss = new ArrayList<>();
public void dfs(TreeNode root, int sum, int targetSum, List<Integer> list) {
if (root==null) {
return ;
}
sum += root.val;
list.add(root.val);
if (root.left == null && root.right==null) {
if (sum == targetSum) {
// listss每次add的list由于是地址的引用,在下面list会remove掉,所以最后的return listss中为[[][]...]
// 要使用new ArrayLists
listss.add(new ArrayList<>(list));
}
}
if (root.left!=null) {
dfs(root.left, sum, targetSum, list);
}
if (root.right!=null) {
dfs(root.right, sum, targetSum, list);
}
list.remove(list.size()-1);
}
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
listss.clear();
List<Integer> list = new ArrayList<>();
int sum = 0;
dfs(root, sum, targetSum, list);
return listss;
}
}