quiero saber como puedo crear un arbol binario a partir de una expresion matematica, por ejemplo si tengo esta expresión ((3+4)*5-(4/8)+7)*(5/(7+2)*3) que lo combierta en arbol Binario con raiz '*'... he intentado implementar algo pero no se me ocurre como seguir :P porfa si alguien sabe algo al respecto no dude en comentar ;) aquí va el código: public class NodoArbol { public int num; public String operador; public NodoArbol Hijo_izq; public NodoArbol Hijo_der; public NodoArbol(int num, String operador){ this.num=num; this.operador=operador; this.Hijo_der=null; this.Hijo_izq=null; } public NodoArbol(NodoArbol nodo){ this.num=nodo.num; this.operador=nodo.operador; this.Hijo_der=null; this.Hijo_izq=null; } } import java.io.*; public class ArbolB { private NodoArbol raiz; public static void main(String []args) throws IOException{ ArbolB arbol = new ArbolB(); arbol.resultado(arbol.armarArbol(arbol.crearExpresion())); } public ArbolB(){ this.raiz=null; } public String[] crearExpresion() throws IOException{ String expresion[]=new String[100]; BufferedReader T = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Escribe la exprecion matematica"); for(int i=0; i<100;i++){ expresion=T.readLine(); } return expresion; } public NodoArbol armarArbol(String[] e) { <------------------ En este método es donde no se me ocurre NodoArbol tree = raiz; <----------------------------------------------------------------------- como seguir implementando :S Stack S=new ArrayStack(); for(int i=0;i<e.length;i++){ if(e.equals('(')){ S.push(e); } if(e.equals(')')){ S.pop(); } if(S.isEmpty()){ raiz.operador=e[++i]; } } return raiz; } public int resultado(NodoArbol raiz){ int result=0; if(raiz.operador.equals('+')){ result=resultado(raiz.Hijo_izq)+resultado(raiz.Hijo_der); }else if(raiz.operador.equals('-')){ result=resultado(raiz.Hijo_izq)-resultado(raiz.Hijo_der); }else if(raiz.operador.equals('*')){ result=resultado(raiz.Hijo_izq)*resultado(raiz.Hijo_der); }else if(raiz.operador.equals('/')){ result=resultado(raiz.Hijo_izq)/resultado(raiz.Hijo_der); }else{ result = raiz.num; } return result; } } import java.util.*; public interface Stack { public boolean isEmpty(); public void push(String o); public String pop()throws EmptyStackException; public void clear(); } import java.util.EmptyStackException; public class ArrayStack implements Stack{ final static int DEFAULT_CAPACITY = 100; private String []stack; private int top=-1; private int capacity; public ArrayStack(int cap){ this.capacity=cap; stack = new String[cap]; } public ArrayStack(){ this(DEFAULT_CAPACITY); } public void clear() { for(int i=0;i<top;i++){ stack = null; } top=-1; } public boolean isEmpty() { return (top<0); } public String pop() throws EmptyStackException { if(isEmpty()){ throw new EmptyStackException(); }else{ String ret = stack [top]; stack [top--] = null; return ret; } } public void push(String o) { if(top==capacity-1){ grow(); } stack[++top]= o; } private void grow(){ String [] old = stack; int oldCapacity=capacity; capacity*=2; stack = new String [capacity]; System.arraycopy(old, 0, stack, 0, oldCapacity); } }