#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
typedef struct Node {
char op; // Operador o número
struct Node* left;
struct Node* right;
} Node;
// Función para crear un nuevo nodo
Node* createNode(char op) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->op = op;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// Evaluar el árbol de expresión
double evaluate(Node* root, double x) {
if (!root) return 0;
// Si es un número, retorna su valor
if (isdigit(root->op)) {
return atof(&(root->op));
}
// Evaluar los subárboles
double leftVal = evaluate(root->left, x);
double rightVal = evaluate(root->right, x);
// Evaluar el operador
switch (root->op) {
case '+': return leftVal + rightVal;
case '-': return leftVal - rightVal;
case '*': return leftVal * rightVal;
case '/': return leftVal / rightVal;
case 'x': return x; // Variable x
case 's': return sin(leftVal); // Función seno
case 'c': return cos(leftVal); // Función coseno
// Agrega más funciones según sea necesario
}
return 0;
}
// Aquí puedes agregar funciones para parsear la cadena y construir el árbol
int main() {
// Ejemplo de uso
Node* root = createNode('+'); // Ejemplo: x + 2
root->left = createNode('x'); // Variable x
root->right = createNode('2'); // Número 2
double result = evaluate(root, 3.0); // Evaluar en x = 3
printf("Resultado: %f\n", result); // Debería imprimir 5.0
// Liberar memoria y otros detalles
return 0;
}