C语言二叉树表达式求值
时间: 2023-12-10 09:33:54 浏览: 134
利用二叉树求表达式值
C语言二叉树表达式求值的具体步骤如下:
1. 定义二叉树节点结构体,包括节点值和左右子节点指针。
2. 定义一个函数用于创建表达式树,该函数接收一个表达式字符串作为参数,返回表达式树的根节点指针。
3. 定义一个函数用于遍历表达式树并计算表达式的值,该函数接收表达式树的根节点指针作为参数,返回表达式的值。
具体实现细节如下:
1. 定义二叉树节点结构体
```c
typedef struct TreeNode {
char value; // 节点值
struct TreeNode *left; // 左子节点指针
struct TreeNode *right; // 右子节点指针
} TreeNode;
```
2. 创建表达式树
```c
// 判断字符是否为运算符
int isOperator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
// 创建表达式树
TreeNode* createExpressionTree(char* expression) {
int len = strlen(expression);
TreeNode* stack[len]; // 定义栈
int top = -1; // 栈顶指针
for (int i = 0; i < len; i++) {
char c = expression[i];
if (isOperator(c)) { // 如果是运算符
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode)); // 创建新节点
node->value = c;
node->right = stack[top--]; // 出栈并作为右子节点
node->left = stack[top--]; // 出栈并作为左子节点
stack[++top] = node; // 将新节点入栈
} else { // 如果是操作数
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode)); // 创建新节点
node->value = c;
node->left = NULL;
node->right = NULL;
stack[++top] = node; // 将新节点入栈
}
}
return stack[0]; // 栈中最后一个节点即为根节点
}
```
3. 遍历表达式树并计算表达式的值
```c
// 计算表达式的值
int calculate(TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) { // 如果是叶子节点,返回节点值
return root->value - '0';
}
int leftValue = calculate(root->left); // 递归计算左子树的值
int rightValue = calculate(root->right); // 递归计算右子树的值
switch (root->value) { // 根据运算符计算表达式的值
case '+':
return leftValue + rightValue;
case '-':
return leftValue - rightValue;
case '*':
return leftValue * rightValue;
case '/':
return leftValue / rightValue;
default:
return 0;
}
}
```
阅读全文