#include<bits/stdc++.h>
using namespace std;
char Treedata[20];
int n=0;
typedef struct BitNode{
char data;
struct BitNode *Lchild,*Rchild;
}BitNode,*BiTree;
typedef struct StackNode{
int data ;
struct StackNode *next;
}StackNode;
typedef struct Stack{
StackNode *top;
int length=0;
}Stack;
//初始化栈
Stack* Init_Stack(){
Stack *s=new Stack;
s->top=NULL;
return s;
}
//入栈
void push(Stack *s,int c){
StackNode *temp=new StackNode;
temp->data=c;
temp->next=s->top;
s->top=temp;
s->length++;
}
//出栈
int Pop(Stack *s)
{
StackNode *temp=s->top;
int data=temp->data;
s->top=temp->next;
s->length--;
return data;
}
//创建二叉树
BiTree CreateBitree(){
BiTree T;
char c;
cin>>c;
if('#'==c) T=NULL;
else{
T=new BitNode;
T->data=c;
T->Lchild=CreateBitree();
T->Rchild=CreateBitree();
}
return T;
}
//后续遍历储存
void LastTravere(BiTree T){
if(T){
LastTravere(T->Lchild);
LastTravere(T->Rchild);
Treedata[n++]=T->data;
}
}
void BOrland(Stack *s,char T[20]){
//cout<<T;
int data1,data2,data3,temp;
for(int k=0;k<n;k++){
if(T[k]>='0'&&T[k]<='9')
push(s,T[k]-'0');
else{
data1= Pop(s);
//cout<<data1<<endl;
data2= Pop(s);
//cout<<data2<<endl;
if(T[k]=='*')
data3=data1*data2;
else if(T[k]=='+')
data3=data1+data2;
else if(T[k]=='-')
data3=data1-data2;
else if(T[k]=='/')
data3=data1/data2;
temp=data3;
push(s,temp);//入栈到栈中只剩下一个数字
}
}
cout<<Pop(s);//打印数字
}
int main(){
cout<<"运算过程:";
BiTree T=CreateBitree();
LastTravere(T);//后序存储
/*for(int k=0;k<n;k++){
cout<<Treedata[k];
}*/
Stack *s=Init_Stack();
BOrland(s,Treedata);
}