Resolvido - Método de Remoção de nós em Árvore Binária  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
diogouchoas
Smalltalk
[Avatar]

Membro desde: 24/05/2009 19:06:47
Mensagens: 3
Localização: Belo Horizonte
Offline

Boa noite galera,
preciso de uma ajuda com um trabalho de faculdade que estou fazendo onde tenho que remover nós de uma árvore binária, porém, não sei se é o método pra imprimir ou meu método de remoção que não está funcionando corretamente. Quando removo um nó que possui filhos, aparentemente os filhos perdem a referencia com o pai do nó removido e na hora de imprimir os elementos na tela, os filhos não são exibidos. Peço que deem uma olhada e tentem me ajudar a solucionar o erro.
Desde já, obrigado !







This message was edited 1 time. Last update was at 10/12/2009 22:36:44

pablosaraiva
JavaGuru

Membro desde: 27/03/2009 17:08:37
Mensagens: 243
Offline

Rapaz... para remover nó em árvore binária não basta apagar o nó.

Um dos nós filhos tem que ocupar o lugar do nó pai que foi removido, ou tudo abaixo daquele nó deixa de fazer parte da árvore.

Você tem que aplicar aqueles algoritmos de giro, sabe? (Se não sabe, dê uma pesquisada sobre remoção de nós em árvores binárias e depois poste as novas dúvidas aqui).

Existem 10 tipos de pessoas no mundo. As que conhecem binário e as que não.
diogouchoas
Smalltalk
[Avatar]

Membro desde: 24/05/2009 19:06:47
Mensagens: 3
Localização: Belo Horizonte
Offline

eu não estou conseguindo imaginar exatamente como irei mudar o método para levar um dos filhos para o lugar do pai quando remove-lo, será que poderia me dar algumas dicas, tenho que entregar o trabalho amanhã e já tem duas semanas q não paro de mexer nele.
Outra coisa, se tem criticas construtivas a fazer a respeito de mudanças no código, por favor não se contenham. =D

Agradeço a ajuda,


Diogo

This message was edited 1 time. Last update was at 08/12/2009 19:07:50

pablosaraiva
JavaGuru

Membro desde: 27/03/2009 17:08:37
Mensagens: 243
Offline

Dá uma olhada nesse link.

http://www.cs.usask.ca/content/resources/csconcepts/1998_6/bintree/2-5.html

Existem 10 tipos de pessoas no mundo. As que conhecem binário e as que não.
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

Se não for necessário balanço na árvore pode fazer o método porco:
- Quando for tirar um nó, escolha um dos filhos(1) e insira o outro filho(2) e sua sub-arvore no fim da árvore(1), aí defina o filho(1) no lugar do pai. Isso vai desbalancear muito a árvore mas é um algoritmo bem fácil de fazer;

Ou se fizer da maneira mais normal:
- Quando for retirar o pai, pegue o último elemento(que vai ser uma folha) de um dos filhos e coloque no lugar do pai, assinale os filhos anteriores nesse elemento novo.

Ou se precisar manter ordem, vai ter que brincar de rotacionar para direita e esquerda.

Até!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
WendersonLP
Java Ninja
[Avatar]

Membro desde: 28/03/2009 06:31:49
Mensagens: 261
Localização: Sergipe
Offline

Uma maneira mais fácil de fazer isso é você criar na classe No, da sua árvore, um nó que guarda o endereço do pai, aí quando for remover um determinado nó é só verificar se esse nó contem filho ou filhos e determinar o qual ocupará a posição do nó removido.

Wenderson
Estudande de Sistemas de Informação
5° período
Universidade Federal de Sergipe

http://twitter.com/wenderson_se

[WWW]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

Não é necessário a classe No ter a informação do pai, mas é necessário que quando for remover um elemento você tenha um nó parental na árvore(em geral a raiz ou o pai do no a ser removido) e o nó que você quer remover. Faça uma busca pelo nó que você quer remover através do nó parental e no final vai acabar tendo o pai ( se você já não o passou ) e o nó a ser removido. Agora é mão na massa.

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
diogouchoas
Smalltalk
[Avatar]

Membro desde: 24/05/2009 19:06:47
Mensagens: 3
Localização: Belo Horizonte
Offline

Ae galera, valeu as dicas... Consegui resolver o problema...agora ta tudo funfando de boa...


Main


Classe Árvore


Classe Nó


Classe Aluno


 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team