Hashing array of strings as Merkle tree in one function
In my opinion this statement is quite complicated to read, compared to what you want achieve:

int nextSize = currentSize % 2 == 0 ? currentSize / 2 : (currentSize + 1) / 2;


You could consider using some brackets:

int nextSize = (currentSize % 2 == 0) ? (currentSize / 2) : ((currentSize + 1) / 2);


Or just use Math.ceil():

int nextSize = (int) Math.ceil(currentSize / 2.0))


Furthermore you are computing hashes.size() twice per loop:

while(hashes.size() &gt; 1)
{
    int currentSize = hashes.size();
    // ...


you could write:

int currentSize = hashes.size();
while(currentSize &gt; 1)
{
    currentSize = hashes.size();
    // ....


instead.

Other than that your code looks fine to me, besides strs is not the best name for a parameter. You could rename it to improve readability and usability.