public void insertHelper(int value, int idx, List <int> rightSmallerCounts, int numSmallerAtInsertTime) { if (value < this.value) { leftSubtreeSize++; if (left == null) { left = new SpecialBST(value); rightSmallerCounts[idx] = numSmallerAtInsertTime; } else { left.insertHelper(value, idx, rightSmallerCounts, numSmallerAtInsertTime); } } else { numSmallerAtInsertTime += leftSubtreeSize; if (value > this.value) { numSmallerAtInsertTime++; } if (right == null) { right = new SpecialBST(value); rightSmallerCounts[idx] = numSmallerAtInsertTime; } else { right.insertHelper(value, idx, rightSmallerCounts, numSmallerAtInsertTime); } } }