using System;
using System.Windows.Forms;
namespace ArbolMatematico
{
//Clase encargada de mostrar la interfaz gráfica
//para capturar y evaluar expresiones matemáticas.
public partial class GenerarFrutos : Form
{
public GenerarFrutos()
{
InitializeComponent();
}
//Valida, construye y evalúa la expresión matemática.
private void btnCalcular_Click(
object sender,
EventArgs e)
{
try
{
//Obtiene la expresión ingresada.
string expresion =
txtExpresion.Text.Trim();
//Verifica que exista una expresión.
if (string.IsNullOrEmpty(
expresion))
{
MessageBox.Show(
"Ingrese una expresión.");
return;
}
//Valida que los paréntesis estén balanceados.
if (!ArbolMatematico
.ParentesisBalanceados(
expresion))
{
MessageBox.Show(
"Paréntesis no balanceados.");
return;
}
//Construye el árbol de expresión.
NodoMatematico raiz =
ArbolMatematico
.ConstruirArbol(
expresion);
//Evalúa el árbol matemático.
double resultado =
ArbolMatematico
.Evaluar(
raiz);
//Muestra el resultado al usuario.
lblResultado.Text =
"Resultado: "
+ resultado;
//Limpia el árbol anterior.
txtArbol.Clear();
//Muestra el nuevo árbol generado.
ImprimirArbol(
raiz,
0);
}
catch (Exception ex)
{
MessageBox.Show(
"Error: "
+ ex.Message);
}
}
//Limpia la interfaz para realizar un nuevo cálculo.
private void btnReiniciar_Click(
object sender,
EventArgs e)
{
txtExpresion.Clear();
lblResultado.Text =
"Resultado:";
txtArbol.Clear();
txtExpresion.Focus();
}
//Imprime la estructura del árbol matemático.
private void ImprimirArbol(
NodoMatematico nodo,
int nivel)
{
//Caso base de la recursividad.
if (nodo == null)
{
return;
}
//Genera la sangría según el nivel.
for (int i = 0;
i < nivel;
i++)
{
txtArbol.AppendText(
" ");
}
//Muestra el valor del nodo actual.
txtArbol.AppendText(
nodo.valor
+ Environment.NewLine);
//Recorre el subárbol izquierdo.
ImprimirArbol(
nodo.izquierda,
nivel + 1);
//Recorre el subárbol derecho.
ImprimirArbol(
nodo.derecha,
nivel + 1);
}
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: