思路是后续遍历二叉树(也就是后最表达式)遍历到一个元素时存入到栈里一个,如果遇到符号就弹出当前的两个栈顶元素和符号运算,求出值再插入栈中,知道最后一个元素就是算数表达式的值。
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef struct{
char data[MaxSize];
int top;
}Sqstack;
void InitStack(Sqstack &s){
s.top=-1;
}
bool push(Sqstack &s,char x){
if(s.top==MaxSize-1)
return false;
else
s.data[++s.top]=x;
return true;
}
bool pop(Sqstack &s,char &x){
if(s.top==-1)
return false;
else
x=s.data[s.top--];
return true;
}
void Print(Sqstack s){
printf("栈中元素:");
for(int i=0;i<=s.top;i++)
printf("%c ",s.data[i]);
printf("\n");
}
typedef struct BiTNode{
char data;
BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Sqstack s;
void fun(BiTree B){
if(B!=NULL){
fun(B->lchild);
fun(B->rchild);
printf("节点:%c\n",B->data);
if(B->data&