题目
分析
深度优先遍历
public class Solution {
/**
*
* @param root TreeNode类
* @param sum int整型
* @return int整型ArrayList<ArrayList<>>
*/
public int numSum = 0;
public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
// write code here
ArrayList<ArrayList<Integer>> res = new ArrayList();
ArrayList<Integer> result = new ArrayList();
preOrder(root,res,result,sum);
return res;
}
public void preOrder(TreeNode root,ArrayList<ArrayList<Integer>> res,ArrayList<Integer> result,int sum){
if(root == null) {
return;
}
result.add(root.val);
numSum = numSum + root.val;
//如果是叶子结点
if(root.left == null && root.right == null && numSum == sum) {
ArrayList<Integer> r = new ArrayList(result);
res.add(r);
numSum = numSum - result.remove(result.size()-1);
return;
}
preOrder(root.left,res,result,sum);
preOrder(root.right,res,result,sum);
numSum = numSum - result.remove(result.size()-1);
}
}