Olá pessoal. Seguinte… estou com uma dúvida na implementaçao de meu programa da universidade. Preciso implementar uma Árvore Binária que guarda dados do tipo String… bem, trabalho feito. Seguindo pelo código abaixo, vcs podem ver que ao inserir ordenadamente na árvore, eu comparo o dado do pai com o dado do novo nó à ser inserido… eis a questão. E se eu digitar somente inteiros na String?
Por ex.:
:arrow: ao inserir [1, 2, 10] eu quero que ao listar crescentemente ele liste [1, 2, 10] e não [1, 10, 2].
Eu pesquisei aqui no fórum, li algo sobre as interfaces Comparator e Comparable, porém não consegui achar um jeito de implementar no meu problema.
Abaixo, meu código funcionando.
[code]import javax.swing.JOptionPane;
public class ArvoreBinaria {
private No raiz;
public ArvoreBinaria() {setRaiz(null);}
public No getRaiz() {return raiz;}
public void setRaiz(No raiz) {this.raiz = raiz;}
public boolean isEmpty() {return (getRaiz() == null);}
public void insereOrdenado(String dado) {
No novo = new No();
novo.setDado(dado);
No r = insere(novo, getRaiz());
setRaiz(r);
}
public No insere(No novo, No pai) {
if (pai != null) {
if (novo.getDado().compareTo(pai.getDado()) < 0) // Aqui eu faço a comparação entre as Strings
pai.setEsquerda(insere(novo, pai.getEsquerda()));
else
pai.setDireita(insere(novo, pai.getDireita()));
return pai;
}
return novo;
}
public String pesquisaBinaria(final String chave, No pai) {
if (pai != null && pai.getDado().equals(chave)) {
return "Valor: " + chave + "\nEncontrado: Sim";
} else if (pai == null) {
return "Valor: " + chave + "\nEncontrado: Não";
} else if (chave.compareTo(pai.getDado()) < 0) { //Aqui também comparo as Strings
pai = pai.getEsquerda();
pesquisaBinaria(chave, pai);
} else {
pai = pai.getDireita();
pesquisaBinaria(chave, pai);
}
return null;
}
public void listar() {
if(isEmpty()) {
JOptionPane.showMessageDialog(null, "Árvore Vazia! Impossível listá-la!", "Listar", JOptionPane.ERROR_MESSAGE);
return;
}
String[] options = {"Crescente", "Decrescente", "Pré-Ordem", "Pós-Ordem"};
int op = JOptionPane.showOptionDialog(null, "Selecione a forma de listagem:", "Listar",
JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
System.out.println();
switch (op) {
case 0: listarCrescente(getRaiz()); break;
case 1: listarDecrescente(getRaiz()); break;
case 2: preOrdem(getRaiz()); break;
case 3: posOrdem(getRaiz()); break;
default: JOptionPane.showMessageDialog(null, "Favor Selecionar uma das Opções", "Listar", JOptionPane.WARNING_MESSAGE); break;
}
}
public void listarCrescente(No pai){
if(pai != null){
listarCrescente(pai.getEsquerda());
System.out.print(pai.getDado() + " - ");
listarCrescente(pai.getDireita());
}
}
public void listarDecrescente(No pai) {
if(pai != null){
listarDecrescente(pai.getDireita());
System.out.print(pai.getDado() + " - ");
listarDecrescente(pai.getEsquerda());
}
}
//abaixo métodos restantes[/code]
Obrigado desde já pessoal!