Exibir Árvore Binária

0 respostas
LanHSD

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;
    }
    
}
Criado 11 de maio de 2013
Respostas 0
Participantes 1