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.