| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 18:37:21
|
diogouchoas
Smalltalk
![[Avatar]](/images/avatar/471987bb07f93f6d79abdb6369bd99ad.jpg)
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 18:49:18
|
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 19:05:14
|
diogouchoas
Smalltalk
![[Avatar]](/images/avatar/471987bb07f93f6d79abdb6369bd99ad.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 19:12:34
|
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 19:55:12
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
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) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 21:20:55
|
WendersonLP
Java Ninja
![[Avatar]](/images/avatar/c1bb74048a5d773b8107cdc90cce668d.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/12/2009 21:34:26
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
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) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/12/2009 00:10:28
|
diogouchoas
Smalltalk
![[Avatar]](/images/avatar/471987bb07f93f6d79abdb6369bd99ad.jpg)
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
|
|
|
 |
|
|