Estou precisando de uma arvore de expressões matemáticas pra poder estudar…encontrei em livros codigos prontos o problema e que eu não sei inglês, e não entendo os comentários. Eu também não consigo implementar sozinha, ja que eu sei so o basico em java…Eu fiz semestre passado uma arvore de arquivos, mas foi em pascal.Não tem nada a ver com java.
Tenho uma aplicaçao desta q pode te ajudar.fiz pra trab da facu.Tem algumas alteraçoes talves o codigo nao rode pq tudo tinha de ser emplementado nao podia usar nenhuma estrutura de dados pronta do java.Dai, implementei tudo e neste codigo foi mudado por ex a Stack q era com a minha implementaçao(class MinhaPilha).Mas contudo acho q darah certo e qq duvida dah um toque.
import java.io.*;
import javax.swing.*;
import java.util.*;
class Arvore
{
private String info;
private Arvore esq;
private Arvore dir;
public Arvore()
{
this.info ="";
this.esq = null;
this.dir = null;
}
public Arvore(String info)
{
this.info = info;
this.esq = null;
this.dir = null;
}
public Arvore(String info,int num)
{
this.info = info;
this.esq = null;
this.dir = null;
this.str = "";
this.num = num;
}
public String getInfo()
{
return this.info;
}
public Arvore getEsq()
{
return this.esq;
}
public Arvore getDir()
{
return this.dir;
}
public void setInfo(String info)
{
this.info = info;
}
public void setEsq(Arvore esq)
{
this.esq = esq;
}
public void setDir(Arvore dir)
{
this.dir = dir;
}
public void percorrePre(Arvore arvBin)
{
if(arvBin != null)
{
str = str + " "+ arvBin.getInfo();
percorrePre(arvBin.getEsq());
percorrePre(arvBin.getDir());
}
}
public void percorreIn(Arvore arvBin)
{
if(arvBin!= null)
{
percorreIn(arvBin.getEsq());
str = str + " "+ arvBin.getInfo();
percorreIn(arvBin.getDir());
}
}
public void percorrePos(Arvore arvBin)
{
if(arvBin!= null)
{
percorrePos(arvBin.getEsq());
percorrePos(arvBin.getDir());
str = str + " "+ arvBin.getInfo();
}
}
}
//este metodo converte a expressao INFIXA para POSFIXA
public String converteInfixaPosfixa(String suaExpressaoInfixa)
{
String posFixa ="";
String aux ="";
Stack pilha = new Stack();
StringTokenizer comando = new StringTokenizer(suaExpressaoInfixa);
while(comando.hasMoreTokens())
{
aux = comando.nextToken();
if(!ehOperador(aux))
{
posFixa += " "+ aux;
}
else if(aux.equals("("))
{
pilha.push(new Arvore(aux));
}
else if(aux.equals(")"))
{
Arvore arv = pilha.pop();
String str = arv.getInfo();
while( !str.equals("("))
{
posFixa +=" "+ str;
Arvore arv = pilha.pop();
String str = arv.getInfo();
}
}
else
{
if(!pilha.empty())
{
Arvore arv = pilha.peek();
String aux2 = arv.getInfo();
if(prioridade(aux2) >= prioridade(aux))
{
Arvore arv = pilha.pop();
posFixa += = arv.getInfo();
}
pilha.push(new Arvore(aux));
}
else
{
pilha.push(new Arvore(aux));
}
}
}
while(!pilha.empty())
{
Arvore arv = pilha.pop();
posFixa += = arv.getInfo();
}
return posFixa;
}
//ESTE METODO CRIARA SUA ARVORE COM OS OPERADORES NO CAMPO INFO DE CADA ARVORE
public No criaArvore(String suaExpressaoPosFixa)
{
Stack pilha = new Stack();
StringTokenizer comando = new StringTokenizer(suaExpressaoPosFixa);
while(comando.hasMoreTokens())
{
String str = comando.nextToken();
Arvore arv = new Arvore(str);
if(ehOperador(str))
{
Arvore aux = (Arvore)pilha.pop();
Arvore aux2 = (Arvore)pilha.pop();
arv.setEsq(aux2);
arv.setDir(aux);
pilha.puch(avr);
}
else
{
No p = new No(arv);
pilha.push(p);
}
this.cont++;
}
return pilha.peek();
}
Falow
Carlos Martins