Arvore avl generica

Tenho um codigo de arvore avl e tenho que fazer com que ela aceite objetos genericos, usando aquele metodo de . tentei aqui mas não consegui

import java.util.Scanner;
public class ArvoreAVL {

    private static class ARVORE {

        public int num, altd, alte;   //dado, altura direita, altura esquerda
        public ARVORE dir, esq; // tipo arvore direita esquerda
    }


    public static ARVORE inserir(ARVORE aux, int num) {
        // o objeto novo é um objeto auxiliar
        ARVORE novo;
        if (aux == null) {  // se é vazio
            novo = new ARVORE();  // cria uma nova arvore
            novo.num = num; // coloca numero no numero da arvore
            novo.altd = 0; // altura = o
            novo.alte = 0; // altura = o
            novo.esq = null; // sem filho na esquerda
            novo.dir = null; // sem filho na direita
            aux = novo; // auxiliar = arvore
        } else if (num < aux.num) { // se não for vazio insere. se numero é menor que numero que esta na arvore
            aux.esq = inserir(aux.esq, num);  // vai inserir na esquerda
            if (aux.esq.altd > aux.esq.alte) {
                aux.alte = aux.esq.altd + 1;
            } else {
                aux.alte = aux.esq.alte + 1;
            }
            aux = balanceamento(aux);
        } else {
            aux.dir = inserir(aux.dir, num); // se numero for maior, insere na direita
            if (aux.dir.altd > aux.dir.alte) {
                aux.altd = aux.dir.altd + 1;
            } else {
                aux.altd = aux.dir.alte + 1;
            }
            aux = balanceamento(aux);
        }
        return aux;
    }

    public static ARVORE balanceamento(ARVORE aux) {
        int d, df;
        d = aux.altd - aux.alte;
        if (d == 2) {
            df = aux.dir.altd - aux.dir.alte;
            if (df >= 0) {
                aux = rotacao_esquerda(aux);
            } else {
                aux.dir = rotacao_direita(aux.dir);
                aux = rotacao_esquerda(aux);
            }
        } else if (d == -2) {
            df = aux.esq.altd - aux.esq.alte;
            if (df <= 0) {
                aux = rotacao_direita(aux);
            } else {
                aux.esq = rotacao_esquerda(aux.esq);
                aux = rotacao_direita(aux);
            }
        }
        return aux;
    }

    public static ARVORE rotacao_esquerda(ARVORE aux) {
        ARVORE aux1, aux2;
        aux1 = aux.dir;
        aux2 = aux1.esq;
        aux.dir = aux2;
        aux1.esq = aux;
        if (aux.dir == null) {
            aux.altd = 0;
        } else if (aux.dir.alte > aux.dir.altd) {
            aux.altd = aux.dir.alte + 1;
        } else {
            aux.altd = aux.dir.altd + 1;
        }

        if (aux1.esq.alte > aux1.esq.altd) {
            aux1.alte = aux1.esq.alte + 1;
        } else {
            aux1.alte = aux1.esq.altd + 1;
        }
        return aux1;
    }

    public static ARVORE rotacao_direita(ARVORE aux) {
        ARVORE aux1, aux2;
        aux1 = aux.esq;
        aux2 = aux1.dir;
        aux.esq = aux2;
        aux1.dir = aux;
        if (aux.esq == null) {
            aux.alte = 0;
        } else if (aux.esq.alte > aux.esq.altd) {
            aux.alte = aux.esq.alte + 1;
        } else {
            aux.alte = aux.esq.altd + 1;
        }

        if (aux1.dir.alte > aux1.dir.altd) {
            aux1.altd = aux1.dir.alte + 1;
        } else {
            aux1.altd = aux1.dir.altd + 1;
        }
        return aux1;
    }

    public static void exibiremordem(ARVORE aux) {
        if (aux != null) {
            System.out.print(aux.num + "  ");
            exibiremordem(aux.esq);
            exibiremordem(aux.dir);
        }
    }

    public static void exibirpreordem(ARVORE aux) {
        if (aux != null) {
            System.out.print(aux.num + ", ");
            exibirpreordem(aux.esq);
            exibirpreordem(aux.dir);
        }
    }

    public static void exibirposordem(ARVORE aux) {
        if (aux != null) {
            exibirposordem(aux.esq);
            exibirposordem(aux.dir);
            System.out.print(aux.num + ", ");
        }
    }

    public static void main(String[] args) {
		Scanner s = new Scanner(System.in);

        ARVORE a = null;
        int g;

		do
		{
        System.out.print("Digite  numero \n");
        System.out.print("Digite 0 para parar a insercao numero \n");
        g = Integer.parseInt(s.nextLine());

		if (g!=0)
		{
        a = inserir(a, g );
	}
	}while (g!=0);



        System.out.print("EM : ");
        exibiremordem(a);
        System.out.println();
        System.out.print("PRE : ");
        exibirpreordem(a);
        System.out.println();
        System.out.print("POS : ");
        exibirposordem(a);
        System.out.println();
    }
}

onde eu eu faria esse generico? eu tentei no insere mas não foi

Nem vai conseguir! Não tem como fazer isso para qualquer objeto. No máximo o que você consegue é fazer para uma interface. Ai todos os objetos que implementarem a interface vão poder usar a arvore!

acho que me expressei mal

no exercicio pedia que a arvore aceitasse numeros inteiros mas que a arvore possa aceitar qualquer tipo de obj desde que o mesmo (objeto) implemente a interface padrão do java

seria uma avl que aceitasse char, float int então?

[quote=gustavo.rotondo]acho que me expressei mal

no exercicio pedia que a arvore aceitasse numeros inteiros mas que a arvore possa aceitar qualquer tipo de obj desde que o mesmo (objeto) implemente a interface padrão do java

seria uma avl que aceitasse char, float int então?[/quote] Seria uma arvore que utiliza-se o objeto Number. Ai poderia utilizar todos os outros Integer, Long, Float, etc.

entao tem como fazer isso no meu codigo?

to conseguindo mas travai num erro

uma parte do codigo

public static class ARVORE <E extends Comparable>
    {

	E num;
        public int altd, alte;   //dado, altura direita, altura esquerda
        public ARVORE dir, esq; // tipo arvore direita esquerda
    }


    public static ARVORE inserir(ARVORE aux, E num) {

ele da erro no num do metodo de inserção.

non-static class E cannot be referenced from a static context

nem mudando para static resolve

[quote=gustavo.rotondo]to conseguindo mas travai num erro

uma parte do codigo

public static class ARVORE <E extends Comparable>
    {

	E num;
        public int altd, alte;   //dado, altura direita, altura esquerda
        public ARVORE dir, esq; // tipo arvore direita esquerda
    }


    public static ARVORE inserir(ARVORE aux, E num) {

ele da erro no num do metodo de inserção.

non-static class E cannot be referenced from a static context

nem mudando para static resolve[/quote]

tira a chave " } " que esta fechando a classe e coloca no final do arquivo

remove os static de tudo