Recursividade, Incremento

adicionar cada elemento da Arvore no array, mas não estou conseguindo incrementar de maneira recursiva, quando ele volta de alguma bloco ele volta ao valor inicial que entrou. Ex: se entrar no método do lado esquerdo com índice 2, dentro ele deveria incrementar para 3, para quando fosse entrar no método do lado direito ele iniciasse com índice 3 mas não. Ele entra com 2 no esquerdo, incrementa lá dentro, mas na volta para executar o direto ele inicia com 2 normalmente.

public int[] preOrder(){
	int[] array = new int[size()];
	if (isEmpty()) {
		return array;
	}

	preOrder(array, root, 0);
	return array;
}

private void preOrder(int[] array, BTSNode node, int index) {
	if (!node.isEmpty()) {
		array[index++] = node.getData();
		preOrder(array, node.getLeft(), index);
		preOrder(array, node.getRight(), index);
	}

}

Se usar uma lista facilitaria o trabalho, mas se precisa mesmo usar um array então é necessário atualizar o indice a cada execução do método, algo assim:

private int preOrder(int[] array, BTSNode node, int index) {
	if (!node.isEmpty()) {
		array[index] = node.getData();
                index += 1;
		index = preOrder(array, node.getLeft(), index);
		index = preOrder(array, node.getRight(), index);
	}
        return index;
}

O ++ não iria funcionar não ?
E mesmo desse jeito que você falou não funcionou.
=/

Não sei se o ++ vai funcionar, na verdade prefiro usar sempre o +=1 por ficar mais claro que está somando um, minha opinião.

Testei aqui e funcionou, mas tive que fazer uma mudança:

private int preOrder(int[] array, BTSNode node, int index) {
	if (node != null) {
		array[index] = node.getData();
		index += 1;
		index = preOrder(array, node.getLeft(), index);
		index = preOrder(array, node.getRight(), index);
	}
	return index;
}

Não sei o que !node.isEmpty() significa, nem mesmo o motivo de estar lá. Se mesmo assim não funcionar, tente usar lista e depois converta para array, é mais simples.