Recursividade em arvore binaria?

Criei uma tabela no banco com os seguintes campos:

id_user
id_user_indicou
lateral
id_user_acima
nivel

e com estas informaçoes pretendo criar uma arvore binaria visual. Pretendo usar recursividade para popular a arvore corretamente, ate por que imagino que não possa ser feito de outra forma.

Entretanto confesso que não faço um método recursivo a uns 10 anos, e estou tendo alguma dificuldade para concluir o método.

A principio tenho:

private String verificaAssociadoArvore(ArrayList<Arvore> lista, int i) {
     if(lista.get(i).getId_user_acima() == lista.get(i).getId_user_indicou())
    {
        return lista.get(i).getId_user() + " " + lista.get(i).getNome();
    } else {
        verificaAssociadoArvore(lista, i+1);
    }
    return "Posição Livre";
}

pensei em retornar o nome e usuário concatenados para exibir na arvore caso os valores dos campos usuário_indicou e usuário_acima sejam iguais, e chamar o método novamente para processar o próximo, retornando a String posição livre. A arvore pode ter posições vazias e será exibida com 5 níveis de cada vez, ficando mais ou menos assim:

  Fulano 1
 F2    F3
F4 F5  F6 F7

ou seja, no banco ficaria assim:

(10, 5, 'E', 5, 4, 'Jorge'),
(12, 10, 'E', 10, 5, 'Fulano'),
(13, 10, 'D', 10, 5, 'Luiz Davi'),
(14, 10, 'D', 13, 6, 'Subaru'),
(16, 10, 'D', 14, 6, 'Forester');

Desculpa, mas não entendi qual é a duvida.

Opa, obrigado pelo retorno Kronal,
oq acontece é que nao consigo finalizar o metodo, ou seja, nao consigo chegar ao ponto de popular a arvore binaria usando a recursividade do metodo…

ao meu ver, o cliente que esta em seu local correto, deve retornar, e no caso de nao existir, retorna a string ‘posicao vazia’