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);
        }
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: