Arvorização

Galera, estou desenvolvendo uma aplicação onde tenho que montar uma árvore, jogar no JSON e mandar pra minha JSP.
A parte de configuração do JSON está pronta (só preciso jogar lá em ordem “Pai e seus filhos”)e da jsp tbm.
Estou com dificuldade em varrer minha lista.
Tipo, minha árvore está mais ou menos assim:
nível 1: tem 14 atributosPai
nível 2: tem os filhos desses atributosPai
nível 3: tem os filhos do nível 2

Meu código está assim:

public class AtributoAction extends ActionSupport {

private List<Atributo> atributosList;
private Atributo atributoPai;
private Atributo atributoFilho;

private AtributoDAO atributoDAO;

public String execute() {

   atributosList = new ArrayList<Atributo>();
   atributoDAO = new AtributoDAO();
   //tras todos atributos 
   atributoList = atributoDAO.getAtributos();

   for(Atributo atributo: atributosList){
      //se o idPai == null, ou seja,  não possui pai 
      if(atributo.getIdPai() == null){//vai trazer os 14 atributos nível 1
         atributoPai = new Atributo();
         atributoPai = atributo;
        //esse metodo onde estou com dificuldade pra organizar a arvore
        possuiFilhos(atributoPai.getIdAtributo();
      }
   }

   return SUCCESS;
}

public void possuiFilhos(int idPai){
   for(Atributo atributoFilho : atributosList){
      if(atributoFilho.getIdPai == idPai){
         json = serializer.deep(atributoPai);
         //sei que tenho que fazer uma chamada recursiva 
         possuiFilhos(atributoFilho.getId());
      }
   }
}

Alguém poderia me ajudar?

Oi Chuvinha,

Segue o pseudocódigo, adapte ao seu problema.

[code]public String criarJSON( Nó raiz ) {

// cria um StringBuilder para armazenar o JSON
StringBuilder sb = new StringBuilder();

// gera o JSON do objeto e adiciona no StringBuilder
sb.append( JSON do objeto raiz aqui );

// a raiz tem filhos?
if ( raiz.temFilhos? ) {

    // itera por cada filho
    for ( Nó f : raiz.getFilhos() ) {

        // faz a chamada recursiva, passando o filho.
        // o JSON do objeto vai ser criado e caso ele tenha
        // filhos, entra novamente no método
        sb.append( criarJSON( f ) );

    }

}

// retorna o conteúdo do JSON gerado
return sb.toString();

}[/code]
[]´s