codigo

 package ejercicioexpress;


import java.util.Scanner;


/**

 *

 * @author edins

 */

public class Ejercicioexpress {


    /**

     * @param args the command line arguments

     */

    

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("Ingrese la expresión matemática: ");

        String expresion = scanner.nextLine();

        expresion = expresion.replaceAll("\\s", ""); // Elimina los espacios en blanco


        String[] tokens = expresion.split("(?=\\+|\\-|\\|\\/|\\(|\\))|(?<=\\+|\\-|\\|\\/|\\(|\\))");


        ArbolExpresiones arbol = new ArbolExpresiones();

        arbol.raiz = arbol.construirArbol(tokens, 0, tokens.length - 1);


        System.out.println("\nÁrbol de Expresión:");

        arbol.imprimirArbol(arbol.raiz, 0);

    }

   }

   


class Nodo {

    String valor;

    Nodo izquierda, derecha;


    Nodo(String item) {

        valor = item;

        izquierda = derecha = null;

    }

}


class ArbolExpresiones {

    Nodo raiz;


    ArbolExpresiones() {

        raiz = null;

    }


    Nodo construirArbol(String[] expresion, int inicio, int fin) {

        if (inicio > fin) return null;


        int indice = -1;

        int contador = 0;

        int nivel = 0;


        for (int i = inicio; i <= fin; i++) {

            if (expresion[i].equals("("))

                nivel++;

            else if (expresion[i].equals(")"))

                nivel--;

            else if ((nivel == 0) && (expresion[i].equals("+") || expresion[i].equals("-") ||

                    expresion[i].equals("*") || expresion[i].equals("/"))) {

                indice = i;

                break;

            }

        }


        if (indice == -1) {

            if (expresion[inicio].equals("(") && expresion[fin].equals(")")) {

                return construirArbol(expresion, inicio + 1, fin - 1);

            }

            return new Nodo(expresion[inicio]);

        }


        Nodo nodo = new Nodo(expresion[indice]);

        nodo.izquierda = construirArbol(expresion, inicio, indice - 1);

        nodo.derecha = construirArbol(expresion, indice + 1, fin);


        return nodo;

    }


    void imprimirArbol(Nodo nodo, int espacio) {

        if (nodo == null) return;


        espacio += 10;


        imprimirArbol(nodo.derecha, espacio);


        System.out.print("\n");

        for (int i = 10; i < espacio; i++)

            System.out.print(" ");

        System.out.print(nodo.valor + "\n");


        imprimirArbol(nodo.izquierda, espacio);

    }

}



    


}

Comentarios