Tô precisando de um código de remoção em árvores binárias.
Só achei aqui o de inserção.
public void Inserir(No novo, No anterior){
if (anterior != null){
if (novo.ObtemValor() < anterior.ObtemValor())
//Como o novo nó tem valor menor do que o do nó anterior, desce para a esquerda do nó anterior.
inicio.filho_Esq=this.Insere(novo, anterior.filho_Esq);
else
if(novo.ObtemValor()>anterior.ObtemValor())
//Como o novo nó tem valor maior do que o do nó anterior, desce para a direita do nó anterior.
anterior.p_Dir=this.Insere(filho, anterior.filho_Dir);
else
//Caso seja um nó já existente, sai do método.
return;
}else
//Insere o novo nó como folha.
anterior = novo;
}
Alguém pode me ajudar aê?
http://www.google.com.br
Pesquisa por binary tree java / árvore binária java ou remove node from binary tree java
Vai haver muitos resultados lá.
Se não entender algum, posta aqui o código que tentaremos ajudar.
Vocês podem me dizer quais são as operações de uma árvore binária?
Uma função recursiva é quando ela chama a si mesma, certo?
Inserir e, se preciso, balancear. Remover e, se preciso, balancear. Basicamente, isto.
Sim, recursividade é a ação de chamar a si mesmo.
Amigo, uma árvore binária precisa, a cada inserção, verificar se os elementos estão balanceados. Simples, pense que você inseriu 5 elementos, vamos representá-los por valores 1, 5, 3, 10 e 8. Como a árvore ordena os elementos à maneira que chegam, respeitando o “valor” maior para direita e menor à esquerda, teríamos algo
1
5
3 8
10
//ou
1
3
5
8
10
Certo?
A árvore está errada, pendendo para o lado direito (há mais níveis no lado direito que no esquerdo do nó principal, o 1).
Para isto, a árvore terá de se reordenar ou seja, balancear.
Ela fará rotações dos nós até ter o formato mais equilibrado
5
3 8
1 10
//ou
1
3
5
8
10
Percebeu?
O nó 1 é o menor, portanto, ele será deslocado para a posição mais à esquerda. O elemento 5 é o mais equilibrado, fica como nó principal. O elemento 10 é o maior, fica como último, à direita. 3 e 8 são intermediários.
Caso você adicione 2
5
2 8
1 3 10
//ou
1
2
3 5
8
10
Entendeu?
Essa é a estrutura básica de uma árvore binária.
Sugiro ler um pouco sobre ela.
Então se a árvore não tiver balanceada eu faço o que chamam de heap sort? Um algoritmo de ordenação…
Não.
Heap sort, bobble sort ou afins não se aplicam diretamente à árvores.
Você até pode criar uma árvore binária sem balanceamento, mas ela perde a “funcionalidade”. Haja visto o exemplo que dei.
O que você precisa fazer, ao implementar a árvore binária é “prever” estas condições.
Ela pode ter rotação simples ou dupla à direita ou à esquerda, ou ainda, rotação simples direita-esquerda, dependendo do que for inserido nela.
Sempre haverá a verificação, para o nó principal, sendo o valor inserido maior que o nó principal, este elemento será colocado à sua esquerda. No próximo nível, a comparação é refeita, se for maior, vai para à direita, até encontrar um nó ao qual possa se encaixar.
Se menor, vai para à esquerda. Assim sucessivamente.
Quando um lado possui profundidade (diferença entre o nível que possui os últimos nós até o principal) maior que o outro, é preciso fazer o balanceamento.
Tem muita coisa na net, eu vi isto em C, mas é fácil compreender como funciona.
Então o heap sort é outro tipo de estrutura de dados, certo?
Sort = organizar. Ele serve para ordenar determinadas estruturas (eu usava com vetores e matrizes)