#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建新节点
TreeNode* createNode(char value) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = value;
newNode->left = newNode->right = NULL;
return newNode;
}
// 计算表达式树的值
int evaluateExpressionTree(TreeNode* root) {
if (root == NULL) {
return 0;
}
// 叶节点,直接返回操作数
if (root->left == NULL && root->right == NULL) {
return root->data - '0';
}
int leftValue = evaluateExpressionTree(root->left);
int rightValue = evaluateExpressionTree(root->right);
switch (root->data) {
case '+':
return leftValue + rightValue;
case '-':
return leftValue - rightValue;
case '*':
return leftValue * rightValue;
case '/':
if (rightValue == 0) {
printf("除零错误\n");
exit(1);
}
return leftValue / rightValue;
default:
return 0;
}
}
int main() {
// 构建表达式树 3 + 5 * 2
TreeNode* root = createNode('+');
root->left = createNode('3');
TreeNode* mulNode = createNode('*');
root->right = mulNode;
mulNode->left = createNode('5');
mulNode->right = createNode('2');
int result = evaluateExpressionTree(root);
printf("表达式的值为: %d\n", result);
return 0;
}