Saber profundidade de uma arvore

2 respostas
jeovane.reges

Boa noite a todos do GUJ.

Pessoal, gostaria de saber como que faço para saber qual será o nivel máximo de uma árvore que irei construir da seguinte forma.

1 - Tenho uma lista que irei pegar o tamanho dela com lista.size()
2 - Essa minha árvore vai ter 5 filhos e cada filho vai mais 5 filhos e assim por diante.

Alguém poderia me dar uma ideia de como eu poderia fazer isso?
Desde de já obrigado pela ajuda de todos.

2 Respostas

jeovane.reges

Tentei fazer da seguinte forma para descobrir o nivel da árvore mais acho que não está certo.

Explicando o código:
Como minha lista sempre vai ter pelo menos um elemento então terei pelo menos um nível por isso que inicializo essa minha variavel quantidadeDeNiveis com 1.

public static void main(String[] args)
    {
        int tamanhoLista = 1500;
        System.out.println("Quantidade de Niveis: " + nivelMaximo(tamanhoLista));
    }

    public static int nivelMaximo(int c)
    {
        int quantidadeDeNiveis = 1;
        int tamanhoLista = c;

        for (int i = 1; i < c; i = (int) Math.pow(5, quantidadeDeNiveis))
        {
            System.out.println(i);
            if (tamanhoLista > i)
            {
                quantidadeDeNiveis++;
            }
        }

        return quantidadeDeNiveis;
    }

Eu fiz assim, mas tenho minhas dúvidas se estar correto.
Alguém poderia me dizer se realmente é assim?

R

Rapaz… fiz rapidao aqui no forum mesmo por isso deve ter erro mas da pra vc ter uma ideia…

Fiz do seguinte modo: a pessoa passa o tamanho. A variavel qtdePorNivel mostra quantos nós tem aquele nivel. No nivel 1 tem 1 nó que é onde começa. Esse nó tem 5 filhos então o nivel 2 vai ter 5. Nivel 3 vai ter 25 e assim por diante. O For vai aumentando o nivel e medindo quantos tem por nivel comparado ao tamanho passado. Quando o tamanho for menor que a qtdade por nivel, tem-se o numero de nivel ja que o restante do tamanho seria alocado naquele nivel.

Nao sei se é o metodo ideal, o mais pratico ou o mais rapido… foi o que pensei agora aqui e talvez funcione…

public int calculaNivel( int tamanho ) {

   int qtdePorNivel = 1;
   int nivel = 1;

   for ( int i = 1; i < tamanho ; i++ ) {

      if ( qtdePorNivel >  tamanho ) {
        return i;
      }

      tamanho -= qtdePorNivel;
      qtdePorNivel *= 5;
      nivel = i++;
   }
   
   return nivel;
}
Criado 11 de outubro de 2011
Ultima resposta 12 de out. de 2011
Respostas 2
Participantes 2