private void shiftLeaf(final int fromIndex, final int destIndex, Array<E> newArray) {
        if (Math.min(fromIndex, destIndex) < array.getSize()) {
            newArray.setElement(destIndex, array.getElement(fromIndex));

            // There is no point to move nulls, so the condition is cheked for
            if (!(array.getElement(getLeftChildIndex(fromIndex)) == null
                    && array.getElement(getLeftChildIndex(destIndex)) == null)) {

                shiftLeaf(getLeftChildIndex(fromIndex), getLeftChildIndex(destIndex), newArray);
            }

            if (!(array.getElement(getRightChildIndex(fromIndex)) == null
                    && array.getElement(getRightChildIndex(destIndex)) == null)) {

                shiftLeaf(getRightChildIndex(fromIndex), getRightChildIndex(destIndex), newArray);
            }
        }
    }