69、路径总和 II

题目描述:
在这里插入图片描述
思路:先使用递归将所有的结果放入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);
        
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/89007042