Implementação árvores ABB

Olá,

Estou precisando de uma grande ajuda para fazer o seguinte: através de uma tela de cadastro, tenho que obter as informações digitadas pelo usuário, exemplo: Cadastrar um livro, então vou precisar do título, autor, ano, editora, com isso, tenho que gravar essas informações na forma de objetos, mas como vou fazer para vincular essas informações à árvore ABB?!?!?! pois se eu atribuir o objeto livro à arvore, como vou vincular a ela seus atributos?!
tô perdida!!!..rs
desde já agradeço!!!
um abraço!

Para inserir um objeto Livro em qualquer árvore, você deve colocar estes atributos (nome, autor, etc), dentro da classe, e esta deve implementar a interface Comparable, e ter o método compareTo, pois as árvores ordenam seus elementos a partir deste método. Voce deve indeicar como os livros serão comparados, se será pelo nome do livro, pelo autor, etc. e este método retorna 0 se os objetos forem iguais, -1 se o objeto this vier antes de objeto do argumento e 1 se vier depois.

public class Livro implements Comparable {
//…
public int compareTo(Object outro) {
se nome < nome do outro return -1
se nome > nome do outro return 1
senao return 0

}
}

Espero que seja esta sua dúvida
Valeu()

Olá,

Estou com o mesmo problema da minha amiga ali em cima. O que acontece é o seguinte. Temos que criar uma interface de cadastro de referencias bibliograficas e associar à uma árvore ABB. Conseguimos guardar apenas o valor de um atributo na variavel dado . Gostaria de saber como posso fazer pra salvar todos os atributos(codigo, titulo, autor, ano…) relacionados ao meu objeto livro e armazena-lo no Nó da arvore ABB ?

Segue exempleo do código que estamos utilizando abaixo.

//Insere um elemento na árvore
public No insertABB( No raiz, String e )
{
//Se a raiz não estiver vazia, e tiver um valor vazio, alterar
if(!isEmpty() && raiz != null && raiz.getDado().equals(""))
{
raiz.setDado(e);
return raiz;
}
else
{
if ( raiz == null )
return new No( e );

    //Se for menor que a raiz, inserir à esquerda
    if (e.compareTo( raiz.getDado() ) &lt; 0) 
    {
      raiz.setEsq(insertABB( raiz.getEsq(), e ));
    } 
    
    //Senão, inserir á direita
    else 
    {
      raiz.setDir(insertABB( raiz.getDir(), e ));
    }
    return raiz;
}

}

//Altera o dado do nó
public void setDado(String novo)
{
	this.dado = novo;
	
}

Obrigado

Acontece que o objeto No está guardando uma String, voce deve implementar uma classe No onde o dado guardado do no seja um objeto, :lol: tipo voce quer criar uma arvore de Livros entao a classe no deve conter:

private No filhoDireita;
private No filhoEsquerda;
private No pai;
private Livro dado;

Na classe Livro voce implementa o compareTo e coloca no cabecalho implements Comparable:

public Livro implements Comparable {
private String nome;
private String autor;
//…etc

//…
public int compareTo(Livro outro) {
if(nome.compareTo(outro.getNome()) < 0) return -1;
if(nome.compareTo(outro.getNome()) > 0) return 1;
return 0;
}

public int compareTo(Object outro) {
return compareTo((Livro)outro)
}
}

ento voce podera normalmente inserir o No na arvore como voce esta fazendo!

qualquerDuvidaAvise()

Olá,
O problema na classe No é que você está tratando o dado (tipo Livro) como se fosse uma String, o que na verdade nao é. Você teria que fazer o seguinte (marcarei as alterações):

Código classe No
public class No implements Comparable
{
//Dados do nó
private Livro dado;
private No esq;
private No dir;

private No pai; // Nao conheco arvore ABB mas eu acho que todo no deve ter um apontador para o no pai

/*Construtor sem parâmetros
Nao seria necessario, pois todo Object tem um construtor sem parametros, onde todos os atributos sao Null
public No()
{
this(null,null,null);
} */

// Seria necessario apenas este:
public No(Livro _dado)
{
dado = _dado;
esq = null;
dir = null;
}

//Altera o dado do nó
public void setDado(Livro novo)
{
dado = novo;

}

//Retorna o dado do nó
public String getDado()
{
return dado;
}

//Altera o filho esquerdo
public void setEsq(No _esq)
{
this.esq = _esq;
}

//Altera o filho direito
public void setDir(No _dir)
{
this.dir = _dir;
}

//Retorna o nó esquerdo
public No getEsq()
{
return esq;
}

//Retorna o nó direito
public No getDir()
{
return dir;
}

[b]//Altera o Pai
public void setPai(No _pai)
{
pai = _pai;
}

//Retorna o nó esquerdo
public No getPai()
{
return pai;
}

public int compareTo(No outro) {
if(dado.compareTo(outro.getDado()) < 0) return -1;
if(dado.compareTo(outro.getDado()) > 0) return 1;
return 0;
}[/b]
}

classe livro com um contrutor
public class Livro implements Comparable
{
//dados do livro

private String cod,tit,aut,ano,tipo,veic,imag;

public void salvaLivro(String _cod,String _tit,String _aut,String _ano,String _tipo, String _veic,String _imag)
{
this.cod = _cod;
this.tit = _tit;
this.aut = _aut;
this.ano = _ano;
this.tipo = _tipo;
this.veic = _veic;
this.imag = _imag;
}

public int compareTo(Livro outro) {
if(tit.compareTo(outro.getTitulo()) < 0) return -1;
if(tit.compareTo(outro.getTitulo()) > 0) return 1;
return 0;
}

}

O No precisa ter apenas um construtor para gravar o dado nele, e todos os apontadores do No sao null, pois apenas na hora da inserção é que eles sao alterados, e nao durante a criacao. Para inserir utiliza-se o metodo compareTo de No, que pega o compareTo de livro.

esperoTerAjudado()