backtrack的套路{
先加这一层t
判断是否满足,满足就输出
递归继续其他的选择t+1
减掉这一层t
}
可参见40题
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> res=new ArrayList<>();
backtrack(root,sum,0,res,new ArrayList<>());
return res;
}
public void backtrack(TreeNode root,int sum,int curr,List<List<Integer>> res, List<Integer> list){
if(root==null) return;
curr+=root.val;
list.add(root.val);
if(curr==sum&&root.left==null&&root.right==null){ //这里一定要加上叶子限制的条件
res.add(new ArrayList<Integer>(list));
}
backtrack(root.left,sum,curr,res,list);
backtrack(root.right,sum,curr,res,list);
curr-=root.val;
list.remove(list.size()-1);
}
}