二叉树中和为某一值的路径(二)
深度优先搜索,申请两个数组即可。 注意终止条件。
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int expectNumber) {
ArrayList<ArrayList<Integer>> lists=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list=new ArrayList<Integer>();
if(root==null) return lists;
dfs(root,list,lists,expectNumber);
return lists;
}
public void dfs(TreeNode root,ArrayList<Integer> list,ArrayList<ArrayList<Integer>> lists,int sum){
if(root==null) return;
list.add(root.val);
sum-=root.val;
if(sum==0&&root.left==null&&root.right==null) lists.add(new ArrayList<>(list));
dfs(root.left,list,lists,sum);
dfs(root.right,list,lists,sum);
list.remove(list.size()-1);
}