Bom.. isso está me deixando louco na faculdade…
Sabe aquelas coisas que você entende mais não compreende…. É Árvore Binária.
Postando aqui o que saiu depois de muita luta… pra ajudar quem tiver prescisando de exemplo de Árvore Binária em JAVA.
O codigo esta abaixo, ou faça o download clicando aqui.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package arvorebinaria;
/**
*
* @author fox
*/
public class TesteArvoreBinaria {
public static void main(String[] args) {
new TesteArvoreBinaria().run();
}
static class No {
No esquerda;
No direita;
int valor;
public No(int valor) {
this.valor = valor;
}
}
public void run() {
No raiz = new No(20);
System.out.println("Exemplo de Arvore Binaria");
System.out.println("Criando arvore com a raiz " + raiz.valor);
inserir(raiz, 22);
inserir(raiz, 6);
inserir(raiz, 15);
inserir(raiz, 8);
inserir(raiz, 17);
inserir(raiz, 7);
inserir(raiz, 3);
inserir(raiz, 11);
inserir(raiz, 9);
remover(raiz, 15);
}
public void inserir(No node, int valor) {
if (valor < node.valor) {
if (node.esquerda != null) {
inserir(node.esquerda, valor);
} else {
System.out.println(" Inserindo " + valor + " a esqueda de " + node.valor);
node.esquerda = new No(valor);
}
} else if (valor > node.valor) {
if (node.direita != null) {
inserir(node.direita, valor);
} else {
System.out.println(" Inserindo " + valor + " a direita de " + node.valor);
node.direita = new No(valor);
}
}
}
public No remover(No node, int valor) {
System.out.println(" Corendo No " + node.valor);
if (node == null) {
System.out.println(" Arvore vazia ");
}
if (valor < node.valor) {
node.esquerda = remover(node.esquerda, valor);
} else if (valor > node.valor) {
node.direita = remover(node.direita, valor);
} else if (node.esquerda != null && node.direita != null) // 2 filhos
{
System.out.println(" Removeu No " + node.valor);
node.valor = encontraMinimo(node.direita).valor;
node.direita = removeMinimo(node.direita);
} else {
System.out.println(" Removeu No " + node.valor);
node = (node.esquerda == null) ? node.esquerda : node.direita;
}
return node;
}
public No removeMinimo(No node) {
if (node == null) {
System.out.println(" ERRO ");
} else if (node.esquerda != null) {
node.esquerda = removeMinimo(node.esquerda);
return node;
} else {
return node.direita;
}
return null;
}
public No encontraMinimo(No node) {
if (node != null) {
while (node.esquerda != null) {
node = node.esquerda;
}
}
return node;
}
}
Olá, procurei seu e-mail para te mandar um e-mail e não achei.
Gostaria de saber se tem como você me explicar esse código dessa árvore binária.
http://www.foxnet.com.br/portal3/?p=71
Agradeço desde já.
Ola amigo,
Qual a sua dúvida?
Abrax.
Olá. Coloquei seu código para compilar em java, mas está estranho, pois está jogando todos valores a esquerda de 20. Será que fiz errado, ou é assim mesmo? Se possivel me responda e explica o que seu código faz em compilação. Obrigado!
Vou verificar, ja tem uns 2 anos que fiz esse codigo.
Muito legal seu código e esta bem simples de compreender da pra ver que você realmente entendeu essa parada.
Obrigado por compartilhar isso conosco quando surgir duvidas eu voltarei a procura-lo.
Vlw…
/* Java Begins */
cara vlw awe ajudo muito…..
gostei do algoritmo…..
cara você mi ajudou com esse algoritmo, tenho um pouco de noção e deu pra entender tudo e mudar algumas coisas pra deixar filé, os negocio é só nos numeros lite
Obrigado…
Olá porque você declara static classe no e new TesteArvoreBinaria não entendi essas duas linhas.
Você tá criando uma classe dentro de outra classe ?
public static void main(String[] args) {
new TesteArvoreBinaria().run();
}
static class No {
No esquerda;
No direita;
int valor;
public No(int valor) {
this.valor = valor;
}
}