Arvore de expressão

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