又一道DFS题,题意如下:
Given a binary tree and a sum, find all root-to-leaf paths where each path‘s sum equals the given sum.
For example:
Given the below binary tree and sum
,
= 22
5 / 4 8 / / 11 13 4 / \ / 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
非常容易,跟之前的打印所有路径是一样的,直接上代码:
static List<List<Integer>> result; static List<Integer> current; public static List<List<Integer>> pathSum(TreeNode root, int sum) { result = new ArrayList<List<Integer>>(); current = new ArrayList<Integer>(); s(root,sum); return result; } static void s(TreeNode root,int sum){ if(root == null){ return; }else if(root.left == null && root.right == null){ current.add(root.val); int temp = 0; for(int i=0;i<current.size();i++) { temp+=(int)current.get(i); } if(temp == sum){ List<Integer> ct = new ArrayList<Integer>(current); result.add(ct); } current.remove(current.size()-1); return ; } current.add(root.val); s(root.left,sum); s(root.right,sum); current.remove(current.size()-1); return; }
不过也有一个小细节需要注意,就是在给result做add方法的时候,不可以用静态变量的引用去添加,只要没有new一个新的对象,所有的引用都指向原来的一份拷贝,所以一旦修改,result里的也会变,所以需要每一次都new一个新的一维list去添加到result。
时间: 2024-11-06 03:43:45