gawering Posted October 9, 2011 Report Share Posted October 9, 2011 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 :SStack 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);}elseif(raiz.operador.equals('-')){result=resultado(raiz.Hijo_izq)-resultado(raiz.Hijo_der);}elseif(raiz.operador.equals('*')){result=resultado(raiz.Hijo_izq)*resultado(raiz.Hijo_der);}elseif(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);}} Link to comment Share on other sites More sharing options...
Th3_K4T Posted October 9, 2011 Report Share Posted October 9, 2011 no leí tu código, pero yo hice esto en c, incluyendo el algoritmo para calcular la expresión, y lo primero que tienes que hacer es un algoritmo para transformar la expresión a postfija, luego de eso, la metes al árbol, el algoritmo está en internet. Link to comment Share on other sites More sharing options...
gawering Posted October 9, 2011 Author Report Share Posted October 9, 2011 okaa gracias :) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now