Arvore Binária de Pesquisa - e ordenamento de Strings usando compareTo

4 respostas
VitorX

Olá, este é meu primeiro post, portanto sejam pacientes comigo.

Meu professor de ALPRO II pediu para que cadastremos alunos através de uma Interface Gráfica armazenando-os em uma árvore binária de pesquisa, e também para imprimirmos na interface a lista dos alunos ordenados por Matrícula( quanto maior a matrícula mais em cima deve ficar o aluno na lista). Outro ponto do problema é que devo usar o método compareTo para fazer o ordenamento:
public int compareTo(Aluno obj) {
        
        return this.getMatricula().compareTo(obj.getMatricula());
    }
Minha dúvida é como faço para comparar as matrículas, percorrendo a arvore e ordena-las em ordem de maior para menor. Se puderem postar o código agradeceria. Para ajudar postarei também a interface TADABP para mostrar os métodos que tenho disponíveis para usar.
public abstract void addABP(Dado d);
    public abstract Dado searchABP(Dado d);
    public abstract Dado get();
    public abstract Dado getEsq();
    public abstract Dado getDir();
    public abstract Dado getRoot();
    public abstract Dado getPai();
    public abstract boolean vazia();
    public abstract int count();
    public abstract int countLeaves();
    public abstract Vector<Dado> traversalPre();
    public abstract Vector<Dado> traversalPos();
    public abstract Vector<Dado> traversalCentral();
    public abstract Vector<Dado> traversalWidth();
    public abstract String strTraversalPre();
    public abstract String strTraversalPos();
    public abstract String strTraversalCentral();

Gracias

4 Respostas

muldon

Ai vai amigo. Veja que coloquei uma inner class para nao precisar criar outro arquivo. Agora é so vc encaixar na sua estrutura ai da interface… peace of cake !!!
Abraco !

package br.com.testes;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
 * Classe criada para testes com metodo compareTo
 * @author rodrigo.silva
 *
 */


public class ComparaMatriculas {
    
    public static void main( String[] args ) {
	
	/**
	 * Exemplo 1: utilizando compareTo implicitamente
	 */
	Map<Integer, String> arvore = new TreeMap<Integer, String>();
	
	arvore.put( 1, "Maria" );
	arvore.put( 2, "Joao" );
	arvore.put( 8, "Pedro" );
	arvore.put( 7, "Carlos" );
	arvore.put( 4, "Rogerio" );
	arvore.put( 5, "Rodrigo" );
	arvore.put( 6, "Eduardo" );
	arvore.put( 3, "Fernanda" );
	
	System.out.println("Alunos ordenados: \n");
	for(Map.Entry<Integer, String> aluno : arvore.entrySet()){
	    System.out.println("Matricula: "+aluno.getKey()+ " - Nome: "+aluno.getValue());
	}
	System.out.println("\n\n\n");
	/*
	 * 
	 * Veja que a lista saiu ordenada. Motivo: a Classe Integer ja
	 * implementa a Interface Comparable veja: public final class Integer
	 * extends Number implements Comparable<Integer>. Como os numeros de 1 a 8 sao 
	 * Integers (..), ao inserir automaticamente a lista sai Ordenada.
	 * 
	 */
	
	/*
	 * Vamos agora utilizar o metodo compareTo explicitamente: 
	 */
	List<Aluno> alunos = new ArrayList<Aluno>();
	
	Aluno aluno1 = new Aluno();
	aluno1.setMatricula( 1 );
	aluno1.setNome( "Maria" );
	
	Aluno aluno2 = new Aluno();
	aluno2.setMatricula( 2 );
	aluno2.setNome( "Joao" );
	
	Aluno aluno3 = new Aluno();
	aluno3.setMatricula( 3 );
	aluno3.setNome( "Fernanda" );
	
	Aluno aluno4 = new Aluno();
	aluno4.setMatricula( 4 );
	aluno4.setNome( "Rogerio" );
	
	Aluno aluno5 = new Aluno();
	aluno5.setMatricula( 5 );
	aluno5.setNome( "Rodrigo" );
	
	Aluno aluno6 = new Aluno();
	aluno6.setMatricula( 6 );
	aluno6.setNome( "Eduardo" );
	
	Aluno aluno7 = new Aluno();
	aluno7.setMatricula( 7 );
	aluno7.setNome( "Carlos" );
	
	Aluno aluno8 = new Aluno();
	aluno8.setMatricula( 8 );
	aluno8.setNome( "Pedro" );
	
	alunos.add( aluno1 );
	alunos.add( aluno3 );
	alunos.add( aluno5 );
	alunos.add( aluno8 );
	alunos.add( aluno7 );
	alunos.add( aluno2 );
	alunos.add( aluno4 );
	alunos.add( aluno6 );
	
	System.out.println("Alunos desordenados: \n");
	for(Aluno aluno:alunos){
	    System.out.println("Matricula: "+aluno.getMatricula() + " - Nome: "+aluno.getNome());
	}
	
	/*
	 * Veja que imprimiu na ordem em que foram inseridos. Agora vamos ordena-los e imprimir
	 * novamente 
	 */
	System.out.println("\n\n\nAlunos ordenados - ohh yeahhh : \n");
	Collections.sort(alunos);
	for(Aluno aluno:alunos){
	    System.out.println("Matricula: "+aluno.getMatricula() + " - Nome: "+aluno.getNome());
	}
	
    }
     
}



class Aluno implements Comparable<Aluno> {
    private Integer matricula;
    private String nome;
    

    /**
     * Comparacao em ordem decrescente de matricula 2.compareTo(1)
     */
    public int compareTo( Aluno a ) {
	return a.getMatricula().compareTo(getMatricula());
    }


    public Integer getMatricula() {
        return matricula;
    }


    public void setMatricula( Integer matricula ) {
        this.matricula = matricula;
    }


    public String getNome() {
        return nome;
    }


    public void setNome( String nome ) {
        this.nome = nome;
    }


}
ViniGodoy

Muldon, você esqueceu das tags code! Pode corrigir ali em cima?

muldon

oks !!

public abstract Dado searchABP(Dado d);

Amigo, numa Interface os metodos sao por default public e abstract, ou seja, nao é necessário declarar dessa forma nas interfaces, bastava:
Dado searchABP(Dado d);

ok ?

Se o seu professor disser que nao, peca para ele rever seus conceitos... Abraco !
VitorX
Amigo, numa Interface os metodos sao por default public e abstract, ou seja, nao é necessário declarar dessa forma nas interfaces, bastava:

Correto, mas apenas copiei a interface que o professor disponibilizou!

A solução que encontrei foi esta:
public void actionPerformed(ActionEvent e){
		if(e.getSource()==ok){
			String n = nome.getText();
			String m = matricula.getText();
			Aluno aln = new Aluno(n,m);
			arv.addABP(aln);
			Vector<Aluno> v = arv.traversalCentral();
			StringBuilder aux = new StringBuilder();
			for(Aluno aluno: v){
			    aux.append("-> ");
			    aux.append(aluno.getNome());
			    aux.append(" - ");
			    aux.append(aluno.getMatricula());
			    aux.append("\n");
			    
			 }
			 matriculas.setText("\n ");
			 matriculas.setText(aux.toString());
}

Mas é sempre bom ver outras soluções!!!
Curti muito o fórum e pretendo usa-lo bastante, obrigado.

Criado 15 de novembro de 2007
Ultima resposta 15 de nov. de 2007
Respostas 4
Participantes 3