题目描述:
思路:先使用递归将所有的结果放入result中,然后对result进行遍历
然后找出和为sum的那个list中的结果,效率比较低
代码:
/**
* 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>> result = new ArrayList<>();
List<Integer> tem = new ArrayList<>();
if(root == null ){
return result;
}
pathSumpre(root, result,tem);
System.out.println(result.toString());
//进行寻找
List<List<Integer>> re = new ArrayList<>();
for (List<Integer> integer : result) {
int sum1 = 0;
for (Integer integer2 : integer) {
sum1 += integer2;
}
if(sum == sum1){
re.add(integer);
}
}
return re;
}
public static void pathSumpre(TreeNode root,List<List<Integer>> result,List<Integer> tem){
if(root.left == null && root.right == null){
tem.add(root.val);
List<Integer> r = new ArrayList<>(tem);
result.add(r);
return ;
}
tem.add(root.val);
if(root.left != null){
pathSumpre(root.left, result, tem);
tem.remove(tem.size() - 1);
}
if(root.right != null){
pathSumpre(root.right, result, tem);
tem.remove(tem.size() - 1);
}
}
}
排名靠前的代码
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> results = new ArrayList<>();
List<Integer> result = new ArrayList<>();
function(result, results, root,0,sum);
return results;
}
void function(List<Integer> result, List<List<Integer>> results,TreeNode root, int sum, int target){
if(root==null)
return ;
result.add(root.val);
if(root.left==null&&root.right==null){
if(sum+root.val==target)
results.add(new ArrayList(result));
result.remove(result.size()-1);
return;
}
function(result,results,root.left,sum+root.val,target);
function(result,results,root.right,sum+root.val,target);
result.remove(result.size()-1);
}
}