首页 > 代码库 > 由数字式子生成对应的二叉树
由数字式子生成对应的二叉树
/*由式子生成二叉树*/ //例如输入:1-2*3+4/(5+6)-7*8# #include<stdio.h> #include<malloc.h> ////////////////////////////////////////////////////////////////////////////////////////////////// //定义数据结构 #define MaxSize 50 typedef struct{ int b;//指示是数字还是运算符,如果是数字为0,如果是运算符,也用来区分是同类中是第几个运算 int pri; int data; }Array; typedef struct BitNode{ //ElemType data; Array data; struct BitNode *lchild,*rchild; }BitNode,*BiTree; ////////////////////////////////////////////////////////////////////////////////////////////////// void Print(Array A[],int length){ int i=0; while(i<length){ if(A[i].b) printf("%c",A[i].data); else printf("%d",A[i].data); i++; } printf("\n"); } int ToInOrder(Array A[],Array B[],int length){ //将式子转化为中序,即效果上是去除括号 int i=0,k=0; for(i=0;i<length;i++) if(A[i].data!='(' && A[i].data!=')') B[k++]=A[i]; return k; } int ToPostOrder(Array A[],Array C[],int length){ int i=0,k=0; Array D[MaxSize];//栈 int top=-1,temp; for(i=0;i<length;i++){ if(A[i].b!=0){//判断是否是运算符 temp=A[i].pri; if(top!=-1){ while(top!=-1 && D[top].pri>temp) C[k++]=D[top--];//出栈 if(top!=-1 && D[top].pri==temp){ top--;//出栈‘(’并且舍弃‘)’ continue; } } D[++top]=A[i];//入栈 switch(A[i].data){//修改栈内优先级 case '+':D[top].pri=3;break; case '-':D[top].pri=3;break; case '*':D[top].pri=5;break; case '/':D[top].pri=5;break; case '(':D[top].pri=1;break; case ')':D[top].pri=6;break; } } else C[k++]=A[i];//如果是数字,直接输出 } while(top!=-1)//出栈 C[k++]=D[top--]; return k; } BiTree PostInCreateTree(Array A[],Array B[],int l1,int h1,int l2,int h2){//由中序和后序来构造树,l1,h1为最小下标和最大下标 int i=0,llen=0,rlen=0; BiTree T=(BiTree)malloc(sizeof(BitNode)); T->data=http://www.mamicode.com/A[h1];//A为后序>由数字式子生成对应的二叉树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。