I think that the sort function has something wrong.
if (leftMat != null) return -1;
if (rightMat != null) return 1;
===>
if (leftMat != null && rightMat == null) return -1;
if (leftMat == null && rightMat != null) return 1;
or ===>
if (rightMat == null) return -1;
if (leftMat == null) return 1;