Uma arvore binaria de tipo composto + comparable = BUG

Dae povo!
Seguinte, eu tive que criar uma classe criando a minha BinaryTree, dai fui adcionar do tipo Aposta, e ele diz que o compareTo não pega.
Eu devo criar um compareTo na classe aposta? se sim, como ordeno pelo nome que tem dentro da aposta?

Classe da BinaryTree

[code]package trabalhofinal;
import java.util.*;
import java.io.Serializable;

public class BinaryTree<Dado extends Comparable> implements Serializable{

	class Nodo  implements Serializable {
		private Nodo pai = null;
		private Nodo esq = null;
		private Nodo dir = null;
		private Dado elem = null;
		
		public Nodo getDir() {
			return dir;
		}
		public void setDir(Nodo dir) {
			this.dir = dir;
		}
		public Nodo getEsq() {
			return esq;
		}
		public void setEsq(Nodo esq) {
			this.esq = esq;
		}
		public Nodo getPai() {
			return pai;
		}
		public void setPai(Nodo pai) {
			this.pai = pai;
		}
		public Dado getElem() {
			return elem;
		}
		public void setElem(Dado valor) {
			this.elem = valor;
		}		
	}

	private int qtde = 0;
	private Nodo refRaiz = null;
	private Nodo corrente = null;

	public BinaryTreeABP() {}
	
	public BinaryTreeABP(Dado [] vet)
	{
		for (Dado aux:vet)
			addABP(aux);
	}

	public void addABP(Dado d)
	{
		Nodo novo; 
		
		if (refRaiz == null)
		{
			novo = new Nodo();
			novo.setElem(d);
			novo.setPai(null);
			novo.setEsq(null);
			novo.setDir(null);
			
			refRaiz = novo;
			corrente = novo;
			
			qtde ++;
		}
		else 
			addABPAux(d, refRaiz);
	}
	
	private void addABPAux(Dado d, Nodo n)
	{
		Nodo novo;
		
		if (n != null)
		{
			if (d.compareTo(n.getElem()) < 0)
				if (n.getEsq() != null)
					addABPAux(d, n.getEsq());
				else
				{
					novo = new Nodo();
					novo.setElem(d);
					novo.setPai(n);
					novo.setEsq(null);
					novo.setDir(null);
					
					n.setEsq(novo);
					corrente = novo;
					qtde++;
				}
			else 
			{
				if (n.getDir() != null)
						addABPAux(d, n.getDir());
				else
				{
					novo = new Nodo();
					novo.setElem(d);
					novo.setPai(n);
					novo.setEsq(null);
					novo.setDir(null);
					
					n.setDir(novo);
					corrente = novo;
					qtde++;
				}
			}
		}

	}

	public Dado searchABP(Dado d)
	{
		Nodo nAux;
		Dado res = null;
		
		nAux = searchNodoValueABP(d, refRaiz);
		
		if (nAux != null)
			res = nAux.getElem();
		
		return res;
	}
	
	private Nodo searchNodoValueABP(Dado d, Nodo n)
	{
		Nodo res = null;
		
		if (n != null)
		   if (d.compareTo(n.getElem()) == 0)
			   res = n;
		   else if (d.compareTo(n.getElem()) < 0)
			   		res = searchNodoValueABP(d, n.getEsq());
		   else res = searchNodoValueABP(d, n.getDir());
		
		corrente = res;
		return res;
	}

	public Vector<Dado> traversalCentral()
	{
		Vector<Dado> res = new Vector<Dado>();
		
		traversalCentralAux(refRaiz, res);
		
		return res;
	}
		
	private void traversalCentralAux(Nodo n, Vector<Dado> res)
	{
		if (n != null)
		{
			traversalCentralAux(n.getEsq(), res);
			res.add(n.getElem());
			traversalCentralAux(n.getDir(), res);
		} 

	}

}[/code]

Classe Aposta

[code]import java.util.*;

public class Aposta{

public String nome;
public int ap1;
public int ap2;
public int ap3;
public int ap4;
public int ap5;
public int ap6;
public int ap7;
public int ap8;
public String numSerie;
public String data;


public Aposta() {
	super();
	//Gerando numero de série
    numSerie = (int) (1+Math.random()*100)+""+(int) (1+Math.random()*100)+""+(int) (1+Math.random()*100)+""+(int) (1+Math.random()*100)+""+(int) (1+Math.random()*100)+""+(int) (1+Math.random()*100);
    Calendar cal = new GregorianCalendar();
    cal = Calendar.getInstance();
    data = ""+cal;
}
public int getAp1() {
	return ap1;
}

public int getAp2() {
	return ap2;
}

public int getAp3() {
	return ap3;
}

public int getAp4() {
	return ap4;
}

public int getAp5() {
	return ap5;
}

public int getAp6() {
	return ap6;
}

public int getAp7() {
	return ap7;
}

public int getAp8() {
	return ap8;
}

public String getNome() {
	return nome;
}

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

public String getNumero() {
	String x = ""+ap1+"."+ap2+"."+ap3+"."+ap4+"."+ap5+"."+ap6+"."+ap7+"."+ap8;
    return x;
}

public void setNumero(int numero) throws EmptyNumException{
	if(numero<=0){
        throw new EmptyNumException("Numero não aceito!");
    }
    else{
        if(ap1==0){
            ap1=numero;
        }
        else if(ap2==0){
            ap2=numero;
        }
        else if(ap3==0){
            ap3=numero;
        }
        else if(ap4==0){
            ap4=numero;
        }
        else if(ap5==0){
            ap5=numero;
        }
        else if(ap6==0){
            ap6=numero;
        }
        else if(ap7==0){
            ap7=numero;
        }
        else if(ap8==0){
            ap8=numero;
        }
        else throw new EmptyNumException("Todos os numeros ja apostados!");
        }

    }

public String getNumSerie() {
	return numSerie;
}

public String getData(){
    return data;
}

}[/code]

ja resolvi, criei um compareTo que atendia minhas necessidades (ordenando a ordem por nome dos apostadores).
Vlws!