Sum of all Paths in Binary Tree Problem


  For the given binary tree return the list which has sum of every paths in a tree. i.e Every path from root to leaf.


I've written following solution.

void check()
    {
        List&lt;Integer&gt; out = new ArrayList&lt;&gt;();
        leafsum(root, 0, out);
        System.out.println(out);
    }

    void leafsum(TreeNode root, int curr , List&lt;Integer&gt; sum)
    {


        if(root != null)
        {
            leafsum(root.left, curr+root.data, sum);
            if(root.left == null &amp;&amp; root.right == null ) sum.add(curr+root.data);
            leafsum(root.right, curr+root.data, sum);
        }


    }




  Inorder traversal of Tree


2 4 3 5 1 9 2 5 15

root = new TreeNode(5);
root.left = new TreeNode(4);
root.left.left = new TreeNode(2);
root.left.right = new TreeNode(3);
root.right = new TreeNode(9);
root.right.right = new TreeNode(5);
root.right.left = new TreeNode(1);
root.right.right.left = new TreeNode(2);
root.right.right.right = new TreeNode(15);



  Output


[11, 12, 15, 21, 34]

I would like review about improvements and suggestions.
Formatting
The formatting could be nicer and doesn't follow Java conventions.

The indention isn't correct (maybe a copy and paste error).
Opening braces belong on the same line as the method header/statement.
There are random superfluous spaces (after int curr and root.right == null) and missing spaces around the + operator in curr+root.data
There should be a space between keywords and opening brackets (if (...).
Braces should always be used around a conditional block, even if it only contains a single statement.
There shouldn't be more than a single blank line at a time and there shouldn't any at all inside leafsum in my opinion.

Names
The parameter names could be better:

root should be node.
There is no need to abbreviate curr. It should be current or maybe even currentSum.
The list should have a plural name: sums.

The method itself should also have a plural name such as leafSums.
Early return
In order to minimize indention depth return early out of leafsum instead of putting the complete method body inside the if block:
void leafsum(TreeNode root, int curr, List&lt;Integer&gt; sum) {
    if (root == null) {
      return;
    }
    // method body here.
}

DRY
You are repeating the sum curr + root.data three times.
Handling results
I'm not a big fan creating, carrying around and mutating a list for the results, however your way is probably the least convoluted way with Java's standard collection library. Personally I'd do something like:
static List&lt;Integer&gt; leafSums(TreeNode node, int currentSum) {
    if (node == null) {
        return Collections.emptyList();
    }

    int newSum = currentSum + node.data;

    List&lt;Integer&gt; leftSums = leafSums(node.left, newSum);
    List&lt;Integer&gt; rightSums = leafSums(node.right, newSum);

    List&lt;Integer&gt; sums = new ArrayList&lt;&gt;(leftSums);
    if (node.left == null &amp;&amp; node.right == null) {
        sums.add(newSum);
    }
    sums.addAll(rightSums);

    return sums;
}

except I'd look for alternative to ArrayList that allows more efficient list concatenation with a nicer API.