思路
这个就是深度遍历,然后递归函数需要注意。因为是遍历所有的路径,所以不需要返回值就可以。
在向List<List<Integer>>中添加数据的时候,注意要new一个。不能直接传,因为这个是地址引用,不是值传递。
代码
/**
* 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 {
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
if(root == null){
return new ArrayList<>();
}
List<List<Integer>> res = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
temp.add(root.val);
fun(root,targetSum-root.val,temp,res);
return res;
}
public void fun(TreeNode root, int targetSum,List<Integer> res,List<List<Integer>> result){
if(root.left == null && root.right == null && targetSum == 0){
result.add(new ArrayList(res));
return;
}
if(root.left != null){
targetSum-=root.left.val;
res.add(root.left.val);
fun(root.left,targetSum,res,result);
res.remove(res.size() - 1);
targetSum+=root.left.val;
}
if(root.right != null){
targetSum-=root.right.val;
res.add(root.right.val);
fun(root.right,targetSum,res,result);
res.remove(res.size() - 1);
targetSum+=root.right.val;
}
}
}