利用二叉树求解表达式的值。对于给定的表达式,先利用二叉树创建对应的表达式树,然后后续遍历这颗二叉树,得到的结果即表达式的值。 1.要求输入的表达式以“#”结尾; 2.要求表达式的操作数是1位数; 3.输出表达式3+2*(5-4)-6/3的值。(c语言)
时间: 2025-01-02 12:45:33 浏览: 6
在C语言中,你可以使用递归函数和二叉树数据结构来求解这样的数学表达式。首先,你需要定义一个二叉树节点,每个节点代表一个运算符或一个数字。对于表达式 "3+2*(5-4)-6/3",可以按照以下步骤构建二叉树并计算结果:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char op; // 运算符
int val; // 数字
struct TreeNode *left, *right;
} TreeNode;
// 创建一个空节点
TreeNode* createNode(char op) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->op = op;
node->val = 0;
node->left = node->right = NULL;
return node;
}
// 先序遍历(根-左-右),用于计算表达式
int calculate(TreeNode* root) {
if (root == NULL)
return 0;
if (isdigit(root->op)) { // 如果是数字,直接返回其值
return root->val;
} else { // 否则是运算符,根据运算符处理左右子树
switch (root->op) {
case '+':
return calculate(root->left) + calculate(root->right);
case '- calculate(root->right);
case '*':
return calculate(root->left) * calculate(root->right);
case '/':
return calculate(root->left) / calculate(root->right);
default:
printf("Invalid operator.\n");
return 0;
}
}
}
int main() {
char input[] = "3+2*";
TreeNode* root = createNode(input[0]); // 根据输入构建表达式树
for (int i = 2; input[i] != '#'; i += 2) { // 取操作数部分
TreeNode* child = createNode(input[i]);
int num = input[i + 1] - '0'; // 转换为整数
child->val = num;
if (i % 2 == 0) { // 左孩子
root->left = child;
} else { // 右孩子
root->right = child;
}
}
int result = calculate(root); // 计算表达式的值
printf("The value of the expression is: %d\n", result);
// 清理内存
free(root);
return 0;
}
```
运行这个程序,你会得到表达式 "3+2*(5-4)-6/3" 的值。
阅读全文