Olá galera, tudo bem?
Eu queria saber como posso fazer para exibir uma arvore binaria que criei igual ao comando tree do cmd-windows. Alguém pode me ajudar?
Eu criei uma arvore e ela está exibindo os dados cadastrados em cada nó, só que queria que ao chamar o método exibir mostrar os dados de acordo com o nivel igual ao comando tree.
Meu código por enquanto é o seguinte:
public class No {
int element;
No esquerdo;
No direito;
No(int element){
this.element=element;
esquerdo=null;
direito=null;
}
}
public class Principal {
static No inicio;
static No temp;
public static void main(String[] args) {
Random random = new Random();
for (int i = 0; i < 10; i++) {
int num = random.nextInt(99);
Inserir(i);
}
System.out.println();
ExibirArvore();
System.out.println();
ExibirFolha(inicio);
int x=ContaFolhas(inicio);
System.out.println(x);
}
public static void Inserir(int x) {
No novo = new No(x);
if (inicio == null) {
inicio = novo;
inicio.direito = null;
inicio.esquerdo = null;
} else {
temp = inicio;
while (true) {
if (novo.element > temp.element) {
if (temp.direito == null) {
temp.direito = novo;
break;
} else {
temp = temp.direito;
}
} else {
if (temp.esquerdo == null) {
temp.esquerdo = novo;
break;
} else {
temp = temp.esquerdo;
}
}
}
}
}
public static void ExibirArvore() {
if (inicio == null) {
System.out.println("Arvore Vazia!");
} else {
ExibirNo(inicio);
}
}
public static void ExibirNo(No temp) {
//Caso o System.out.println seja inserido no final do método os nós iram ficar de traz para frente.
//Caso contrario, ficara normal.
System.out.print("[" + temp.element + "]");
if (temp.esquerdo != null) {
ExibirNo(temp.esquerdo);
}
if (temp.direito != null) {
ExibirNo(temp.direito);
}
}
public static void ExibirFolha(No temp){
if(temp.esquerdo!=null){
ExibirFolha(temp.esquerdo);
}
if(temp.direito!=null){
ExibirFolha(temp.direito);
}
if((temp.direito==null)&&(temp.esquerdo==null)){
System.out.println("["+temp.element+"]");
}
}
public static int ContaFolhas(No temp){
int x=0;
if(temp.esquerdo!=null){
x+=ContaFolhas(temp.esquerdo);
}
if(temp.direito!=null){
x+=ContaFolhas(temp.direito);
}
if((temp.direito==null)&&(temp.esquerdo==null)){
x++;
}
return x;
}
}