Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Ruben_Barbosa

Arvore Binaria com Swing

Mensagens Recomendadas

Ruben_Barbosa

  String pal;
        pal= this.txtPesquisa.getText();
        Nodo n=new Nodo(pal);
        Arvore a = new Arvore ();
       a.existeNodo(n);

public boolean existeNodo(Nodo x){
         //Arvore vazia
         if (getRoot()==null)
             return false;
         //Declaração do nodo de temporário
         Nodo p = new Nodo(getRoot().getElement(),getRoot().getLeftChild(),getRoot().getRightChild());
         //Pesquisar o Nodo
         while(true){
             //pesquisa à esquerda
             if((((String)x.getElement()).compareToIgnoreCase((String)p.getElement()))<0){
                 if (p.getLeftChild()!=null)
                     p=p.getLeftChild();
                 else
                     return (false);
             }
             //pesquisa à direita
             else if ((((String)x.getElement()).compareToIgnoreCase((String)p.getElement()))>0){
                 if (p.getRightChild()!=null)
                     p=p.getRightChild();
                 else
                     return (false);
             }
             else //Encontra o nodo
                  JOptionPane.showMessageDialog(null,"Nodo Encontrado"+this.root,"Informação",JOptionPane.INFORMATION_MESSAGE);
                  return true;
         }
     }

Bem é o Seguinte:

O meu Codigo de PEsquisa de Nodo é o que tem como nome Existe Nodo.

E Depois no meu JFRAME no meu Botão pesquisar tenho aquela função que postei aqui.

Mas eu gostaria de verificar se a pesquisa esta a funcionar ou nao pois eu compilo o programa e isto nao da nenhum erro :|.

E gostaria que o valor retorna-se para uma label .

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KarlMTC

Por o que li parece estar correcto, embora com bastante código a mais. Se queres um conselho, as pesquisas numa árvore são muito mais fáceis de fazer com recursividade.

E para a parte da JLabel podes simplesmente retornar uma JLabel ou criar uma a partir do valor de retorno do metodo. Para isso podes usar por exemplo o String.valueOf(boolean :);.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruben_Barbosa

O meu Problema é que escrevo numa Textfield por exemplo Ola e quero que esse ola escrito no TextField seja o Nodo T para ir pesquisar na Arvore :).

Pois a minha Label da-me sempre False :wallbash:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KarlMTC

É normal estar sempre a dar false, porque o teu código nao tem nenhum lugar onde retorne true... xD Tenta o seguinte:

public boolean existeNodo(Nodo novo)
    {
        existeNodo(getRoot(), novo);
    }
    
    private boolean existeNodo(Nodo root, Nodo novo)
    {
        if (root == null)
            return false;
        String s = (String) root.getValor();
        String aux = (String) novo.getValor();
        if (s.equalsIgnoreCase(aux))
            return true;
        if (s.compareToIgnoreCase(aux) < 1)
            return existeNodo(root.getEsquerda(), novo);
        if (s.compareToIgnoreCase(novo) > 1)
            return existeNodo(root.getDireita(), novo);
    }

Nao testei porque nao tenho uma arvore binaria criada, mas em principio esta é a maneira mais fácil de recorrer árvores.

Quanto ao TextField, crias um nodo novo a partir do texto do TextField com o textfield.getText() e depois pesquisas esse nodo:

existeNodo(new Nodo(textfield.getText());

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruben_Barbosa

Já resolvi.

O meu Problema era na Arvore pois tinha o Metodo CreateTree(root,left,rigth);

E não necessito pois a Minha Class Nodo já Trata disso ;).

Eu depois Posto Aqui o Codigo.

Pode ser que ajude Outros :(

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.