Olá pessoal,
Estou tentando implementar uma busca recursiva numa árvore binária (Apenas para exercício da Faculdade). Meu nó tem um atributo do tipo Aluno que por sua vez tem os atributos nome e idade. A questão é quero buscar um elemento da árvore pelo nome do aluno, aí o metodo me retorna o [u]objeto/u que contém esse nome.
passei o dia todo e não consegui. está me parecendo que não é possível ou há algo que não entendo. Rss
O que vocês acham? aqui vai uma parte do código
public class Aluno {
private int idade;
private String nome;
// ...
}
public class ArvoreBinBusca {
private Celula raiz;
public ArvoreBinBusca(){
raiz = null;
}
/* Adiciona uma nova Celula na arvore
* recebe como paramentro o conteudo desta nova Celula
*/
public void adiciona(Aluno conteudo){
Celula nova = new Celula(conteudo);
if (raiz == null){
raiz = nova;
} else {
Celula atual = raiz;
Celula parente;
while (true) {
parente = atual;
if (nova.getConteudo().getIdade() > atual.getConteudo().getIdade()){
atual = atual.getDireita();
if (atual == null){ //ultima celula a direita
parente.setDireita(nova);
return;
}
} else {
atual = atual.getEsquerda();
if (atual == null) { // ultima celula a esquerda
parente.setEsquerda(nova);
return;
}
}
} // fim do while
} // fim do if(raiz == null)
} //fim do metodo adiciona
Celula encontra(Celula atual, String nome){
if (atual == null){
return null;
} else {
if (atual.getConteudo().getNome() == nome){
return atual;
} else {
encontra (atual.getEsquerda(), nome);
encontra (atual.getDireita(), nome);
}
}
return atual;
}
}
public class TesteAdiciona {
public static void main(String[] args){
ArvoreBinBusca arvore = new ArvoreBinBusca();
arvore.adiciona(new Aluno("Alfredo", 18));
arvore.adiciona(new Aluno("Elson", 26));
arvore.adiciona(new Aluno("Paulo", 13));
arvore.adiciona(new Aluno("Pedro", 18));
arvore.adiciona(new Aluno("Tadeu", 19));
arvore.adiciona(new Aluno("Karla", 11));
arvore.adiciona(new Aluno("Tainara", 18));
Celula obj = arvore.encontra(arvore.getRaiz(), "Paulo");
if (obj != null){
System.out.println(obj.getConteudo().getIdade());
}
}
}