Como imprimir árvore binária?

Olá pessoal,

Estou com querendo imprimir a árvore graficamente, da seguinte forma:

Entretanto, não to sabendo bem a lógica do algoritmo e dos espaços.

Eis meu código até então:

public void percorrerDecrescente(BinaryNode node) {	// Imprime do maior para o menor

		if (node != null) {
			
			percorrerDecrescente (node.getRight());	// Percorre sub-árvore direita 
			
			if (node  == raiz){
				System.out.print("_ _ _" + node.getValor() + " ");	// Visita Nó
				System.out.println(" ") ;	
			} else {
				System.out.print("_ _ _ _ _ _" + node.getValor() + " ");	// Visita Nó
				System.out.println(" ") ;
			}
			percorrerDecrescente (node.getLeft());      // Percorre sub-árvore esquerda 
		}
	}

Eu sei que tem de ser mais elaborado e dessa forma não funciona sempre, mas tava fazendo assim pra poder visualizar melhor.

Aqui é a saída do código:
_ _ _ _ _ _15
_ _ _ _ _ _11
_ _ _ _ _ _10
_ _ _ _ _ _9
_ _ _7
_ _ _ _ _ _6
_ _ _ _ _ _5
_ _ _ _ _ _3
_ _ _ _ _ _2

Obg desde já!

Pelo que entendi da imagem, são 3 traços que separam um nó do outro, certo? No teu exemplo, cada nó exceto o root vai sempre adicionar 6 traços _ _ _ _ _ _, independente do nível do nó, e por isso imprime todos iguais.

Uma lógica simples que vejo aí é de “acumular” os traços a cada nó que você passa, assim teu método poderia ter um segundo argumento que é uma string com os traços acumulados, onde o valor inicial seria _ _ _ que representa o primeiro nó (raiz).

percorrerDecrescente(node, "_ _ _");

// quando tiver dentro do método, é preciso passar pro método recursivo
// esse acumulador concatenado com mais 3 traços, e assim por diante
1 curtida

Aham, tlgd, fiz dessa forma só pra visualizar, aí ta imprimindo todos iguais mesmo. Porém, o que eu não sei o que fazer para os traços se acumulem nas posições corretas.

Ex:
Na img que botei o 15 ta mais afastado, daí o 11 já volta mais um pouco e o 10 já avança novamente.

Pelo que eu entendi ele vai acumular os traços indiscriminadamente, a cada nó. Né isso? Aí na minha cabeça fica com cada vez mais traços, a cada iteração.

Entedesse minha dúvida? Valeu

Sim, acho que é por aí mesmo. Chegou a tentar com acumulador e ver como fica a saída?

Aí é que tá kkkkk, eu não quero que ele acumule os os traços indiscriminadamente, entendesse? Quero entender qual a lógica pra acumular mais nas sub-árvores maiores e menos nas menores e por aí vai.