Exibir Árvore Binária

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;  
    }  
      
}