Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Filho do Rei

Estrutura de Dados

Recommended Posts

Segue abaixo um exemplo de implementação de arvore binaria utilizando tipo primitivo int valor.

class No{
	int valor; // Minha duvida é aqui, gostaria que essa arvore binaria utilizasse  objetos, e não tipos primitivos!
	public No p_Esq;
	public No p_Dir;
	
	public No(int valor){
		this.valor = valor;
		this.p_Esq = null;
		this.p_Dir = null;
	}
	
	int ObtemValor() {
		return this.valor;
	}
	
	void DefineValor(int novo) {
		this.valor = novo;
	}
}

class ArvoreBinaria {
	private No raiz;
	//construtor 
	public  ArvoreBinaria() {
		this.raiz = null;
	}
	public No ObtemRaiz() {
		return this.raiz;
	}
	
	public void InsOrd(int novo){
		No n = new No(novo);
		this.raiz = this.Insere(n, this.raiz);
	}

	private No Insere(No novo, No inicio) {
		if (inicio != null) {
			if (novo.ObtemValor() < inicio.ObtemValor())
				inicio.p_Esq=this.Insere(novo, inicio.p_Esq);
			else
				inicio.p_Dir=this.Insere(novo, inicio.p_Dir);
			return inicio;
		}
		else
			return novo;
	}
}

public class Main {

	public static void main(String[] args) {
		ArvoreBinaria arv = new ArvoreBinaria();
		
		arv.InsOrd(10);
		arv.InsOrd(12);
		arv.InsOrd(13);
		arv.InsOrd(9);
		
		System.out.println(arv.ObtemRaiz().p_Dir.ObtemValor());
	}
}

Alguém poderia me auxiliar para fazer com que essa implementação podesse ser mais generica possivel, ou seja, na chamada do metodo InsOrd(10); modificaria o codigo para que na chamada desse metodo eu podesse passar como argumento um objeto se possivel utilizando os tipos genericos do JAVA 5.0.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, você pode modificar o tipo de parâmetro recebido.

 

Dependendo do tipo de parâmetro que você quer usar ai sim tem como você utilizar Generics..

 

Exemplo: Passando uma Lista de objetos para o método InsOrd

 

public void InsOrd(List<Object> novo){

	 // AQUI SUA IMPLEMENTAÇÃO

	}

 

Flwww.. grande abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, você pode modificar o tipo de parâmetro recebido.

 

Dependendo do tipo de parâmetro que você quer usar ai sim tem como você utilizar Generics..

 

Exemplo: Passando uma Lista de objetos para o método InsOrd

 

public void InsOrd(List<Object> novo){

	 // AQUI SUA IMPLEMENTAÇÃO

	}

 

Flwww.. grande abraço

Obrigado sublyer pela sua resposta, mas acho que eu devo ter me confundido com a minha duvida.

 

Na verdade o que eu queria fazer era isso:

 

class No <T extends Number> {
		private T valor;
		public No <T> p_direito;
		public No <T> p_esquerdo;

		public void InsOrd (T novo) {
				No <T> n = new No <T> (novo);
				this.raiz = this.Insere(n, this.raiz); 
		}
}

me corrija se eu estiver errado, mas de forma geral uma arvore binaria deve tratar de apenas numeros e eu estava com o conceito errado de poder colocar qualquer objeto, pois ficaria dificil para ordenar se não fossem numeros.

 

mesmo assim valeu, se voce(sublyer) ou alguem tiver outra forma melhor ou mais interessante posta aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera alguem sabe como funciona arvore binaria em C++(Generica utilizando template), tenho um codigo mas gostaria de saber se alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com números é o mais comum.

Pode ser feito também com caracteres a dificuldade é a mesma.

Com outros tipos de dados fica mais difícil ordenar, mas nada impede.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

me corrija se eu estiver errado, mas de forma geral uma arvore binaria deve tratar de apenas numeros e eu estava com o conceito errado de poder colocar qualquer objeto, pois ficaria dificil para ordenar se não fossem numeros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.