Árvore

Opa, tudo bem?

Estou criando uma árvore de possíveis jogadas em uma aplicação para a faculdade.
A lógica é simples, todos os nodos mantem um estado (uma matriz 9x9 com valores referentes a campos inválidos e campo sem peça, por exemplo).

Estou tendo um problema pois não consigo montar a árvore, só consigo criar um ramo até o seu fim. Era para ser uma criação em profundidade mas isso não ocorre, acredito que seja porque estou manipulando um objeto em comum com outras classes (estadoDoTabuleiro).

Segue o código:

[code]
public class NodoTabuleiro {

/*
* -1 = casa inválida
* 0 = casa em branco
* 1 = casa jogada pelo jogador 1 (Computador)
* 2 = casa jogada pelo jogador 2 (Humano)
*/
public int[][] estadoDoTabuleiro;
public List nodosFilhos = new ArrayList();
public static int totalNodosFilhos;
public Jogada jogada = new Jogada();

//Construtor inicial
public NodoTabuleiro() {
// estadoDoTabuleiro = new int[][]
// {{ 0, 0, 0, 0, 0, -1, -1, -1, -1},
// { 0, 0, 0, 0, 0, 0, -1, -1, -1},
// { 0, 0, 0, 0, 0, 0, 0, -1, -1},
// { 0, 0, 0, 0, 0, 0, 0, 0, -1},
// { 0, 0, 0, 0, 0, 0, 0, 0, 0},
// {-1, 0, 0, 0, 0, 0, 0, 0, 0},
// {-1, -1, 0, 0, 0, 0, 0, 0, 0},
// {-1, -1, -1, 0, 0, 0, 0, 0, 0},
// {-1, -1, -1, -1, 0, 0, 0, 0, 0}};

  estadoDoTabuleiro = new int[][]
 {{  0,  0},
  {  0,  0}};
  jogada.setDono(Jogador.HUMANO);

}

public NodoTabuleiro(int[][] estadoDoTabuleiro) {
this.estadoDoTabuleiro = estadoDoTabuleiro;
}

public NodoTabuleiro(int[][] estadoDoTabuleiro, Jogada novaJogada) {
this.estadoDoTabuleiro = estadoDoTabuleiro;
this.jogada = novaJogada;
this.executarNovaJogada(jogada);
this.achaProximasJogadas();
}

private void executarNovaJogada(Jogada novaJogada) {
int linha = novaJogada.getLinha();
int coluna = novaJogada.getColuna();

  int valorDoCampo = 0;
  switch (novaJogada.getDono()) {
     case COMPUTADOR: valorDoCampo = 1; break;
     case HUMANO: valorDoCampo = 2; break;
  }
  
  estadoDoTabuleiro[linha][coluna] = valorDoCampo;    

}

public int[][] getEstadoDoTabuleiro() {
return estadoDoTabuleiro;
}

public void setEstadoDoTabuleiro(int[][] estadoDoTabuleiro) {
this.estadoDoTabuleiro = estadoDoTabuleiro;
}

public void achaProximasJogadas() {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
if (estadoDoTabuleiro[i][j] == 0) {
Jogador jogador = getProximoJogador(jogada);
Jogada novaJogada = new Jogada(i, j, jogador);
NodoTabuleiro novoEstado = new NodoTabuleiro(estadoDoTabuleiro, novaJogada);
totalNodosFilhos++;
nodosFilhos.add(novoEstado);
}
}
}
}

private Jogador getProximoJogador(Jogada jogada) {
Jogador jogador = null;
switch (jogada.getDono()) {
case HUMANO: jogador = Jogador.COMPUTADOR; break;
case COMPUTADOR: jogador = Jogador.HUMANO; break;
}

  return jogador;

}

}[/code]

Tem como você explicar melhor o seu problema? pro pessoal não precisar copiar e rodar seu código para entender o que ocorre de errado?