此题较为简单,代码如下,复制粘贴即可:
#include <iostream>
#include <malloc.h>
#include <math.h>
using namespace std;
typedef struct node{
char data;
struct node *lchild,*rchild;
}bnode,*btree;
//函数声明区
btree create_btree(); //先序遍历创建二叉树
void print_btree(btree t); //输出打印二叉树
int calculate(btree t); //计算表达式的值
void print_postfix(btree t); //输出后缀表达式
//全局string
string expression;
int main(void)
{
btree t;
t = create_btree(); //创建二叉树
cout << "算数表达式为:" ;
print_btree(t);
cout << endl;
cout << "算数表达式的值为:" << calculate(t) << endl;
cout << "后缀表达式为:" ;
print_postfix(t);
cout << endl;
cout << "后缀表达式的值为:" ;
cout << calculate(t) << endl;
return 0;
}
btree create_btree()
{
btree t;
char c;
cin >> c;
if(c == '#')
{
t = NULL;
}
else
{
t = (btree)malloc(sizeof(bnode));
t->data = c;
t->lchild = create_btree();
t->rchild = create_btree();
}
return t;
}
void print_btree(btree t) //中序输出
{
if(t)
{
print_btree(t->lchild);
cout << t->data;
print_btree(t->rchild);
}
}
int calculate(btree t)
{
int lv,rv,result;
lv = 0;
rv = 0;
if(t->lchild == NULL && t->rchild == NULL)
{
result = t->data - '0';
}
else
{
lv = calculate(t->lchild);
rv = calculate(t->rchild);
switch(t->data)
{
case '+':
result = lv + rv;
break;
case '-':
result = lv - rv;
break;
case '*':
result = lv * rv;
break;
case '/':
result = lv / rv;
break;
case '^':
result = (int)(pow(lv,rv));
break;
}
}
return result;
}
void print_postfix(btree t)
{
if(t)
{
print_postfix(t->lchild);
print_postfix(t->rchild);
cout << t->data;
}
}