二叉树实现中序表达式转换后序表达式

扶醉桌前 提交于 2020-01-11 00:36:26

将中序表达式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];
 }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!