还是二叉树。。搞不定呀
#include <stdio.h>#define MAX 100
typedef struct BiTNode{
int data;
struct BitNode *lchild,*rchild;
}BiTNode,*BiTree;
int creatT(BiTree *T,char c){
if(c==' '){
*T=NULL;
}else{
if(!((*T)=(BiTNode *)malloc(sizeof(BiTNode)))){
printf("ERROR");
return 0;
}
(*T)->data=c;
(*T)->lchild=NULL;
(*T)->rchild=NULL;
}
return 1;
}
void creatTT(BiTree *M,BiTree *N,BiTree *T){
(*T)->lchild=*M;
(*T)->rchild=*N;
}
void printfT(BiTree *T){
if(*T==NULL){
printf(" ");
}else{
printf("%c",(*T)->data);
printfT(&((*T)->lchild));
printfT(&((*T)->rchild));
}
}
int nu(int c){
if(c=='('||c==')'||c=='+'||c=='-'||c=='*'||c=='/'||c=='#'){
return 1;
}else{
return 0;
}
}
int than(int m,int c){
if(m=='+'||m=='-'){
if(c=='+'||c=='-'||c=='#'||c==')'){
return 1;
}else if(m=='*'||m=='/'||c=='('){
return -1;
}
}else if(m=='*'||m=='/'){
if(c=='+'||c=='-'||c=='*'||c=='/'||c==')'||c=='#'){
return 1;
}else if(c=='('){
return -1;
}
}else if(m=='('){
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('){
return -1;
}else if(c==')'){
return 0;
}
}else if(m==')'){
if(c=='+'||c=='-'||c=='*'||c=='/'||c==')'||c=='#'){
return 1;
}
}else{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c=='#'){
return -1;
}else if(c=='#'){
return 0;
}
}
}
int main(int argc, char *argv[])
{
BiTree *T,*M,*b[MAX],*x,*y;
int a[MAX],c,i=0,j=0,k,t,r;
a[0]='#';
c=getchar();
while(a[1]!='#'&&c!=EOF){
if(nu(c)==0){ \\如果是数字
c-='0';
creatT(&M,c);
b[j++]=M;
c=getchar();
}else{
k=than(a[i],c); \\比较运算符优先级
switch(k){
case -1:
a[++i]=c;
c=getchar();
break;
case 0:
i--;
c=getchar();
break;
case 1:
x=b[--j];
y=b[--j];
t=a[i--];
creatT(&T,t);
creatTT(y,x,&T);
b[j++]=T;
break;
default:break;
}
}
}
printfT(&T);
return 0;
}
建立一个计算式的二叉树,输入#结束,比如:2*3+5#。。然后打印出来:+*2 3 5 ,注意有空格。。
现在只能打印出+,而且弹出错误。。到底是哪儿错了呀。。
[ 本帖最后由 Nekomimi 于 2010-1-26 21:45 编辑 ]