Arvore Binaria

1 resposta
S

Não estou conseguindo fazer a main. Alguem pode me ajudar? Preciso construir a classe para criar o objeto e chamar os métodos de acordo com a opção desejada. Segue o meu codigo:

public class TrabABB {

private No raiz;
public TrabABB()

{

raiz = null;

}
public No getRaiz()

{

return raiz;

}
public boolean estaVazia()

{

return (raiz == null);

}
public No busca(No atual, int chave)

{

if (atual == null)

return null;

if (chave == atual.chave)

return atual;

if (chave < atual.chave)

return (busca(atual.filhoDir, chave));

return (busca(atual.filhoEsq, chave));

}
public void insere(int chave)

{

No novoNo = new No();

novoNo.chave = chave;

if(raiz == null)

raiz = novoNo;

else{

No atual = raiz;

No noPai;

while(true)

{

noPai = atual;

if (chave < atual.chave)

{

atual = atual.filhoEsq;

if (atual == null)

{

noPai.filhoEsq = novoNo;

return;

}

}

else

{

atual = atual.filhoDir;

if(atual == null)

{

noPai.filhoDir = novoNo;

return;

}

}

}

}

}
public boolean remove(int chave)

{

No atual = raiz;

No noPai = raiz;

boolean ehFilhoDir = true;
while(atual.chave != chave)   
  {
     noPai = atual;
     if(chave < atual.chave)
     {
        ehFilhoDir = true;
        atual = atual.filhoDir;
     }
     else
     {
        ehFilhoDir = false;
        atual = atual.filhoEsq;
      }
     if(atual == null)             
        return false;                
  }  
  
  
        
  if(atual.filhoDir == null && atual.filhoEsq == null) 
  {
     if(atual == raiz)         
        raiz = null;           
     else if(ehFilhoDir)
        noPai.filhoDir = null;     
     else                           
        noPai.filhoEsq = null;
  }
  
  
  
 
  else if(atual.filhoEsq == null)
     if(atual == raiz)
        raiz = atual.filhoDir;
     else if(ehFilhoDir)
        noPai.filhoDir = atual.filhoDir;
     else
        noPai.filhoEsq = atual.filhoDir;

  
  
  
  else if(atual.filhoDir == null)
     if(atual == raiz)
        raiz = atual.filhoEsq;
     else if(ehFilhoDir)
        noPai.filhoDir = atual.filhoEsq;
     else
        noPai.filhoEsq = atual.filhoEsq;

  
  else  
  {	   
     No predecessor = getpredecessor(atual);

      
     if(atual == raiz)
        raiz = predecessor;
     else if(ehFilhoDir)             
        noPai.filhoDir = predecessor;
     else
        noPai.filhoEsq = predecessor;

    
     predecessor.filhoDir = atual.filhoDir;
     }  
  return true;                               
  }
private No getpredecessor(No delNo)

{

No predecessorNoPai = delNo;

No predecessor = delNo;

No atual = delNo.filhoEsq;

while(atual != null)

{

predecessorNoPai = predecessor;

predecessor = atual;

atual = atual.filhoDir;

}
if(predecessor != delNo.filhoEsq)  
 {   
     predecessorNoPai.filhoDir = predecessor.filhoEsq;
     predecessor.filhoEsq = delNo.filhoEsq;
  }
  return predecessor;

}

public void percurso(int tipopercurso)

{

switch(tipopercurso)

{

case 1: System.out.print("\nPercurso Preorder: “);

preOrder(raiz);

break;

case 2: System.out.print(”\nPercurso Inorder:  “);

inOrder(raiz);

break;

case 3: System.out.print(”\nPercurso Postorder: ");

postOrder(raiz);

break;

}

System.out.println();

}
private void preOrder(No raizLocal)

{

if (raizLocal !=null)

{  System.out.println(raizLocal.chave + " ");

preOrder(raizLocal.filhoEsq);

preOrder(raizLocal.filhoDir);

}

}

private void inOrder(No raizLocal)

{

if (raizLocal != null)

{   inOrder(raizLocal.filhoEsq);

System.out.println(raizLocal.chave + " ");	

inOrder(raizLocal.filhoDir);

}		

}
private void postOrder(No raizLocal)//construir mtodo recursivo

{

if (raizLocal != null)

{  postOrder(raizLocal.filhoEsq);

postOrder(raizLocal.filhoDir);

System.out.println(raizLocal.chave + " ");

}

}

public int alturaABB (No raizlocal)

{

if(raizlocal == null)

return 0;

else{

int he = alturaABB(raizlocal.filhoEsq);

int hd = alturaABB(raizlocal.filhoDir);

if (he<hd)

return(hd+1);

else

return(he+1);

}

}
public int contaNos(No raizLocal)

{

if (raizLocal == null)

return 0;

else

return(1 + contaNos(raizLocal.filhoEsq) + contaNos(raizLocal.filhoDir));

}

public int contaFolhas(No raizLocal)

{

if (raizLocal == null)

return 0;

else{

if (raizLocal.filhoEsq == null && raizLocal.filhoDir == null)

return 1;

else

return (contaFolhas(raizLocal.filhoEsq) + contaFolhas(raizLocal.filhoDir));

}

}
public int contaPais(No raizLocal)

{

if (raizLocal == null)

return 0;

else{

if (raizLocal.filhoEsq == null && raizLocal.filhoDir == null)

return 0;

}

return (1 + contaPais(raizLocal.filhoEsq) + contaPais(raizLocal.filhoDir));

}
public No menorABB(No raizLocal)

{

if (raizLocal == null)

return null;

else

if(raizLocal.filhoEsq == null)

return (raizLocal);

else

return menorABB(raizLocal.filhoEsq);

}

public No maiorABB(No raizLocal)

{

if (raizLocal == null)

return null;

else

if (raizLocal.filhoDir == null)

return (raizLocal);

else

return maiorABB(raizLocal.filhoDir);

}

1 Resposta

xan
olá amigo, da proxima vez tente postar com a tag Code, pois facilita a legibilidade

vc pode criar uma outra classe mainABB que só contenha o método main(),
ou fazer o metodo main() na sua propria classe TrabABB

Ex.

public static void main(String args[])
{

TrabABB arvore = new TrabABB(); //instanciando um objeto da classa TrabABB

//agora é só chamar os métodos para seu objeto

arvore.insere(5); //metodo insere do objeto arvore, com o argumento 5
arvore.insere(6);
arvore.insere(4);
arvore.insere(7);

arvore.remove(7);
//etc
//etc
//etc
}
Criado 27 de novembro de 2007
Ultima resposta 27 de nov. de 2007
Respostas 1
Participantes 2