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
Publicar un comentario