请用树写一个表达式求值的C语言代码
时间: 2023-12-03 13:44:20 浏览: 86
表达式求值 c语言代码
以下是一个简单的树形表达式求值的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char op;
int val;
struct node *left;
struct node *right;
} Node;
Node *create_node(char op, int val) {
Node *node = (Node *)malloc(sizeof(Node));
node->op = op;
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
int evaluate(Node *root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return root->val;
}
int left_val = evaluate(root->left);
int right_val = evaluate(root->right);
switch (root->op) {
case '+':
return left_val + right_val;
case '-':
return left_val - right_val;
case '*':
return left_val * right_val;
case '/':
return left_val / right_val;
default:
return 0;
}
}
int main() {
Node *root = create_node('*', 0);
root->left = create_node('+', 0);
root->left->left = create_node('-', 10);
root->left->left->left = create_node('0', 5);
root->left->left->right = create_node('0', 3);
root->left->right = create_node('*', 0);
root->left->right->left = create_node('0', 2);
root->left->right->right = create_node('0', 4);
root->right = create_node('/', 0);
root->right->left = create_node('0', 8);
root->right->right = create_node('0', 2);
printf("Result: %d\n", evaluate(root));
return 0;
}
```
在这个例子中,我们使用了一个简单的二叉树来表示表达式:每个节点表示一个运算符或一个操作数,左子树和右子树分别表示表达式的左边和右边。
我们使用 `evaluate` 函数来递归地计算整个表达式。当节点是叶子节点时,我们返回其值。当节点是操作符时,我们分别计算其左子树和右子树的值,并根据操作符来执行相应的运算。
在 `main` 函数中,我们构造了一个二叉树来表示表达式 `((10 - 5) + (2 * 4)) * (8 / 2)`,并调用 `evaluate` 函数来计算其值。
阅读全文