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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...