Ordenar Arvore Binaria por NIVEL

Boa noite pessoal, aqui quem vos fala é um estudante de programação desesperado.
Meu problema é o seguinte: tenho que construir um método que retorna uma String (toStringPorNivel) com uma Arvore Binária concatenada de acordo com seus níveis, por ser um objt da própria classe que vai chamar o método não há a necessidade de passar nada como parâmetro.

Mesmo quebrando um pouco a cabeça, consegui realizar os métodos: toStringPreOrdenado, toStringPosOrdenado e o toStringPorArvore…

O que eu fiz aqui, retorna uma String texto onde, a cada quebra de linha, é registrada na variável de texto uma arvore, basta ela possuir um elemento na sua raiz
Segue o código:
public String toStringPorArvore() {

	String texto = "";
	
	
	if(!this.vazia()){
		
	}

	if (!this.vazia()) {
		texto += "RAIZ -> " + this.getRaiz();

		if (!this.getEsq().vazia()) {
			texto += " ESQUERDA ->" + this.getEsq().getRaiz();
		}
		if (!this.getDir().vazia()) {
			texto += " DIREITA ->" + this.getDir().getRaiz();
		}

		if (!this.esq.vazia()) {
			if (!this.getEsq().getEsq().vazia()) {
				texto += "\n" + this.getEsq().getEsq().toStringPorArvore();
			}
			if (!this.getEsq().getDir().vazia()) {
				texto += "\n" + this.getEsq().getDir().toStringPorArvore();
			}
		}

		if (!this.dir.vazia()) {
			if (!this.dir.getDir().vazia()) {
				texto += "\n" + this.getDir().getDir().toStringPorArvore();
			}
			if (!this.dir.getEsq().vazia()) {
				texto += "\n" + this.getDir().getEsq().toStringPorArvore();
			}
		}

	}

	return texto;
}

O que esse código faz é:
Exemplo de Arvore:
6
/
4 7
/ \
3 5 8

Após usar o meu método o retorno será o seguinte:
6, 4, 7
4, 3, 5
7,8

O que eu preciso é de algo assim:
Exemplo de arvore:
6
/
4 7
/ \
3 5 8
Resultado:
6
4,7
3,5,8

A ARVORE PODE TER INFINITOS RAMOS
Eu realmente não sei como resolver isso, já exauri minhas forças em duas madrugadas, qualquer ajuda é de bom grado aceita.
Desde já, obrigado!

Já resolvi, obrigado pela atenção!

A solução que um amigo meu encontrou foi criar um método auxiliar para ir armazenando os níveis.