Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Ruben_Barbosa

Arvore Binaria com Swing

Recommended Posts

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 .

Share this post


Link to post
Share on other 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 :) ;.

Share this post


Link to post
Share on other 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:

Share this post


Link to post
Share on other 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());

Share this post


Link to post
Share on other 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 :(

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.