题目链接:
思路:
通过前序遍历,将遍历的所有路径都存起来,符合条件的路径就加进结果集里
注意:
每次递归时传递的list参数必须是new ArrayList<>(list),需要new一个新地址的list,否则全部公用同一个地址的list
代码:
/**
* 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) {
List<Integer> list = new ArrayList<>();
travelPre(root, targetSum, 0, out, list);
return out;
}
private void travelPre(TreeNode root, int targetSum, int sum, List<List<Integer>> out, List<Integer> list ) {
if( root == null ) {
return;
}
sum += root.val;
list.add( root.val );
if( root.left == null && root.right == null && sum == targetSum)
out.add( list );
//注意:参数必须是new ArrayList<>(list),需要new一个新地址的list,否则全部公用同一个地址的list
travelPre( root.left, targetSum, sum, out, new ArrayList<>(list));
travelPre( root.right, targetSum, sum, out, new ArrayList<>(list));
}
}