c 二叉树 计算数学表达式
二叉树在计算数学表达式中有广泛的应用,尤其是在编译器设计中。一种常见的二叉树结构称为后缀表达式(也称为逆波兰表示法)或逆波兰记法。这种表示法的一个优点是,它消除了运算符的优先级问题,使得计算过程变得简单。
以下是一个简单的C程序,用于构建一个逆波兰表示法的二叉树,并计算其值:
cinclude<stdio.h>
include<stdlib.h>
typedef struct Node {
char data;
struct Node* left;
struct Node* right;
} Node;
Node* newNode(c语言return的用法和搭配char data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
Node* createRPN(char* s) {
if (*s == '\0') return NULL;
Node *temp = newNode(*s);
if(*(s+1) == '\0') return temp;
s++;
temp->left = createRPN(s);
return temp;
}
int evaluateRPN(Node* root) {
if (root == NULL) return 0;
if (root->left == NULL && root->right == NULL) {
return root->data - '0';
}
int a = evaluateRPN(root->left);
int b = evaluateRPN(root->right);
switch (root->data) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
return 0;
}
int main() {
char expression[] = "23+5*";
Node* root = createRPN(expression);
printf("Result: %d", evaluateRPN(root));
return 0;
}
这个程序首先创建一个逆波兰表示法的二叉树,然后通过后序遍历(左子树、右子树、根节点)来计算表达式的值。例如,对于表达式 "23+5*",它将创建一个如下的二叉树:
bash+
/ \
2 3 * 5
然后通过后序遍历计算结果:2 + (3 * 5) = 17。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论