Sunteți pe pagina 1din 4

DEBER ESTRUCTURA DE DATOS #1

Nombre: Carlos Homero Juca Viteri


Paralelo: [A]
Fecha: 15 de diciembre de 2018
Tema: Árbol de Expresión

El primer trabajo para el segundo bimestre consiste en realizar la programación de un "Árbol


de expresión", el mismo que a partir de una ecuación ingresada manualmente y almacenada
en un arreglo unidimensional, permita expresar tal ecuación como un árbol binario, a la vez
que permita resolver la ecuación y presentar el resultado final.

1. Código Fuente

- ** Clase Nodo **
public class Nodo {
char dato;
Nodo izq;
Nodo der;
Nodo padre;

public Nodo(char valor) {


dato = valor;
this.izq = this.der =this.padre= null;
}
}
- ** Clase ArbolExp **

public class ArbolExp {

Nodo raiz = null;


Nodo aux = null;
LinkedList cola = new LinkedList ();

public void Caracter(char x) {


int op;
if (x == '(') {
op = 1;
} else {
if (x == '+' || x == '-' || x == '*' || x == '/') {
op = 3;
} else {
if (x == ')') {
op = 2;
} else {
op = 4;
}
}
}
switch (op) {
case 1:
ParentesisAbre(x);
break;
case 2:
ParentesisCierra();
break;
case 3:
Operador(x);
break;
case 4:
Operando(x);
break;
}

public void ParentesisAbre(char x) {


Nodo nuevo = new Nodo(x);
if (raiz == null) {
raiz = nuevo;
aux = raiz;
} else {
if (aux.izq == null) {
aux.izq = nuevo;
nuevo.padre = aux;
aux = aux.izq;
} else {
aux.der = nuevo;
nuevo.padre = aux;
aux = aux.der;
}
}
}

public void ParentesisCierra() {


aux = aux.padre;
}

public void Operando(char x) {


Nodo nuevo = new Nodo(x);
if (aux.izq == null) {
aux.izq = nuevo;
} else {
aux.der = nuevo;
}
}

public void Operador(char x) {


aux.dato = x;
}

private void imprimirPre(Nodo reco) {


if (reco != null) {
System.out.print(reco.dato + " ");

imprimirPre(reco.izq);
imprimirPre(reco.der);
}
}

public void imprimirPre() {


imprimirPre(raiz);
System.out.println();
}

private void imprimirEntre(Nodo reco) {


if (reco != null) {
imprimirEntre(reco.izq);
System.out.print(reco.dato + " ");
imprimirEntre(reco.der);
}
}

public void imprimirEntre() {


imprimirEntre(raiz);
System.out.println();
}

private void imprimirPost(Nodo reco) {


if (reco != null) {
imprimirPost(reco.izq);
imprimirPost(reco.der);
System.out.print(reco.dato + " ");
cola.offer(reco.dato);
}
}

public void imprimirPost() {


imprimirPost(raiz);
System.out.println();
}
}

- ** Clase main **

import java.util.Scanner;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public static void main(String[] args) {

ArbolExp ae = new ArbolExp();


Scanner e = new Scanner(System.in);
System.out.println("Ingrese la operacion a resolver(entre parentesis): ");
String operacion = e.nextLine();
String datos = "";
char[] lista = new char[operacion.length()];
for (int i = 0; i < operacion.length(); i++) {
lista[i] = operacion.charAt(i);
}
for (int i = 0; i < operacion.length(); i++) {
datos = String.format("%s%s", datos, lista[i]);
ae.Caracter(lista[i]);
}
System.out.printf("RECORRIDO PREORDEN: ");
ae.imprimirPre();
System.out.printf("RECORRIDO INORDEN: ");
ae.imprimirEntre();
System.out.printf("RECORRIDO POSTORDEN: ");
ae.imprimirPost();

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("js");

Object operation;
String result = "";

try {
operation = engine.eval(datos);
result = operation.toString();
} catch (ScriptException ex) {
System.out.printf("Error %s", ex);
}

System.out.printf("El resultado es: %s \n",result);


}
}

2. Captura del Programa

S-ar putea să vă placă și