public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
    	ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
    	
    	if(root == null) return res;
    	ArrayList<ArrayList<Integer>> listleft, listright;
    	
    	if(root.left==null && root.right==null) 
    	{
    		if(sum==root.val) 
    		{
    			ArrayList<Integer> t = new ArrayList<Integer>();
    			t.add(root.val);
    			res.add(t);
    			return res;
    		}

    	}
    	
    	if(root.left != null)
    	{
    		listleft =pathSum(root.left, sum-root.val);
    		for(ArrayList<Integer> t:listleft)
    		{
    			t.add(0, root.val);
    			res.add(t);
    		}
    		
    	}
    	if(root.right != null) 
    	{
    		listright =pathSum(root.right, sum-root.val);
    		for(ArrayList<Integer> t:listright)
    		{
    			t.add(0, root.val);
    			res.add(t);
    		}
    	}
    	return res;

    }