[Resolvido] Duvida, ao retornar valor da subtracao da arvore
10 respostas
olivercld
Olá a todos, vou postar o codigo se alguem puder me esclarecer agradeço, nesse ultimo metodo para retornar o maior valor e o menor valor seria dessa forma que fiz? mais quando vou chamar no principal na main nao consigo.
packageArvore;publicclassTesteArvore{publicstaticvoidmain(String[]args){arvorearvore1=newarvore();// arvore1.inOrder(no2);System.out.println("Subtracao do maior pelo menor valor da arvore:");arvore1.SubDaArvore(locaraiz);}}
Só pra te encher o saco, lembre-se que nomes de packages devem ficar em minúsculas e nomes de classes começam por maiúsculas. Então você deveria ter “package arvore;” e “class Arvore;”
De qualquer forma, não é melhor você criar um método que determina qual é o maior elemento, outro que determina qual é o menor, e então chamar a diferença desses valores? É mais fácil de entender, principalmente quando você usa métodos recursivos.
Do jeito que você fez, ficou muito complicado e não estou conseguindo entender direito o que você fez.
Primeiro, faça funcionar, e depois veja se dá para otimizar.
Fazer já otimizado, logo de cara, dá muitos problemas.
Em particular, acho estranho você desprezar o valor de retorno do método recursivo dentro do método recursivo. É muito esquisito.
olivercld
ok entanglement esqueci desse fato que tu disse do pacote e a classe, bom vou tentar mais uma vez e volto a postar caso nao consiga, valeu obrigado.
olivercld
bom apos varias pesquisas, no wiki, teve uma explicação sobre, bom eu atraves do exemplo dado fiz aqui, por gentileza entanglement se puder me orientar no restante, eu tenho de fazer a subtração agora na main certo, eu faria algo como arvore1. chamo o metodo do maior - arvore1. metodo do menor ?
public int informaMaior(No locaraiz) {
if (locaraiz != null) {
if(maior < locaraiz.chave)
maior = locaraiz.chave;//maior recebe valor, do No atual
this.informaMaior(locaraiz.filhoEsquerda);
//anda pelo lado esquerdo da arvore, em busca do maior
this.informaMaior(locaraiz.filhoDireita);
//anda para o lado direito, em busca do maior
return maior;
}else
return 0;
}
//procurar o menor
public int informaMenor(No locaraiz) {
if (locaraiz != null) {
if(menor > locaraiz.chave)//obvio que vai ser maior, entao
menor = locaraiz.chave;//menor recebe valor, do No atual
this.informaMenor(locaraiz.filhoEsquerda);
//anda pelo lado esquerdo da arvore, em busca do maior
this.informaMenor(locaraiz.filhoDireita);
//anda para o lado direito, em busca do maior
return menor;
}else
return 0;
}
E
entanglement
Que salada, não faça recursividade mútua (que é o que você tentou fazer).
Se você quer usar recursividade mútua, então aprenda a recursividade simples primeiro.
Em vez disso, faça algo como (nem olhei seu código, só estou dando uma espécie de pseudo-código: )
ok, entanglement este pseudo-código, desse metodo que voce mostrou ele é para achar o minimo no caso, menor valor tanto no lado direito como no lado esquerdo ? ou no caso terei de fazer um desse para valor minimo e outro metodo para valor maximo ?
E
entanglement
Agora que você entendeu, não é? É isso mesmo. Crie 2 métodos, e ache a diferença.
Eu sei, eu sei, eu sei que você poderia simplesmente varrer todos os elementos da árvore (usando varredura por profundidade ou por largura, não importa) e achar o máximo e o mínimo de uma vez só, como você tentou fazer.
Mas acho que é mais fácil dividir o problema em 2 em vez de tentar fazer tudo otimizado logo de cara.
Resolva o problema primeiro, e depois, vendo como é que ele foi resolvido, tente otimizá-lo , se possível.
Ninguém acerta as coisas logo de cara (mesmo Deus descansou no 7º dia, mas depois teve de lançar um “service pack”, ou seja, fez o Dilúvio e encarregou Noé de dar um jeito nas coisas. Acho que está na hora de lançar o Service Pack 2
acho que entendi, vou implementar aqui, e nada que la por 4 da manhã retorno dizendo duvida ou resolvido hehehe.
obrigado até agora entanglement aguarde já retornarei para te incomodar hehe
olivercld
entanglement desculpe te incomodar,mais não estou tendo sucesso ao chamar ao fazer a subtração da alguns erros.