Jump to content

ayuda con arbol binario de expresión en java


Recommended Posts

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);

}

}

Link to comment
Share on other sites

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

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...