将中序表达式A+BC-D/E转换为后序表达式ABCDE/-+
将中序表达式构建成如下二叉树,再后序遍历输出二叉树节点即可得到后序表达式。
构建中序表达式二叉树的代码如下
char Stackoperate[MAXSIZE];int topo =-1;
BTNode *StackBTNode[MAXSIZE];int topb =-1;
BTNode *createBTree( char f[])//实现前缀表达式转后缀表达式
{
BTNode *node;
char *p=f;
while(*p!='\0')
{
if(*p=='+'||*p=='-'||*p=='*'||*p=='/')
{
if((topo!=-1)&&(*p=='+'||*p=='-'))//判断操作符
{
node = (BTNode*)malloc(sizeof(BTNode));
node->key=Stackoperate[topo--];
node->rchild=StackBTNode[topb--];
node->lchild=StackBTNode[topb--];
Stackoperate[++topo]=*p;
StackBTNode[++topb]=node;
}
else{
Stackoperate[++topo]=*p;
}
}
else{
node=(BTNode*)malloc(sizeof(BTNode));
node->key=*p;
node->lchild=node->rchild=NULL;
StackBTNode[++topb]=node;
}++p;
}
while(topo!=-1)
{
node=(BTNode*)malloc(sizeof(BTNode));
node->key=Stackoperate[topo--];
node->rchild=StackBTNode[topb--];
node->lchild=StackBTNode[topb--];
StackBTNode[++topb]=node;
}
return StackBTNode[topb];
}