哪位高手帮帮我 我憋了三天 还是大家帮我把 越完全越好 在下实在是学问太少了~~~ 1. 表达式求值。 【基本要求】 1)读入原表达式(括号),创建对应二叉树叉树。 2)对二叉树进行前序遍历、中序遍历、后续遍历(非递归)。 3)后缀表达式和前缀表达式求解原表达式的值。 对非法表达式格式能予以判断。 【选作内容】 原表达式中有三种括号,先作(),再作[],最后是{}。判断括号的优先级别建立二叉树。
怎么说??? 我编了一点点 可是建立树的时候不能够进行括号的判断 就是如果表达式里面有括号就不行了 还有 就是说 不能区分数字和字符呀 怎么才能求值呢??? 要怎么弄呢????? //定义含有三个指针的结点 typedef struct BiTNode{ char data; int op; struct BiTNode *lchild, *rchild, *parent; }BiTNode, *BiTree;
int length; BiTNode *CreatTree(char a[]) { //建立二叉树 BiTNode *t; BiTNode *p; BiTNode *s; BiTNode *q; BiTNode *T; bool cre; cre=false;
/*t=(BiTNode *)malloc(sizeof(BiTNode)); t->lchild=NULL; t->rchild=NULL; t->parent=NULL; */ t=(BiTNode *)malloc(sizeof(BiTNode)); t->lchild=NULL; t->rchild=NULL; t->parent=NULL; t->data=a[0]; t->op=0; p=t; char in; for(int i=1;i<length;i++) { in=a[i]; switch(in) { case '+': t=(BiTNode *)malloc(sizeof(BiTNode)); t->parent =NULL; t->rchild=NULL; t->lchild =NULL; t->data=a[i]; t->op=1; s=p; while(s!=NULL) { q=s; s=s->parent; } q->parent=t; t->lchild=q; //q->rchild =NULL; t->parent =NULL; p=t; break; case '-': t=(BiTNode *)malloc(sizeof(BiTNode)); t->rchild=NULL; t->data=a[i]; t->op=1; s=p; while(s!=NULL) { q=s; s=s->parent; } q->parent=t; t->lchild=q; // q->rchild =NULL; t->parent =NULL; p=t; break;
case '*': t=(BiTNode *)malloc(sizeof(BiTNode)); t->lchild=NULL; t->rchild=NULL; t->data=a[i]; t->op=-1; t->parent =NULL;
if(p->parent ==NULL) { p->parent =t; t->lchild =p; }
else { while(p->parent !=NULL&&p->parent ->op !=1) p=p->parent ; if(p->parent ==NULL) { p->parent =t; t->lchild =p;
} else { p->parent ->rchild =t; t->parent =p->parent ; t->lchild =p; p->parent =t; }
}
p=t; break;
case '/': t=(BiTNode *)malloc(sizeof(BiTNode)); t->lchild=NULL; t->rchild=NULL; t->data=a[i]; t->op=-1; t->parent =NULL;
if(p->parent ==NULL) { p->parent =t; t->lchild =p; }
else { while(p->parent !=NULL&&p->parent ->op !=1) p=p->parent ; if(p->parent ==NULL) { p->parent =t; t->lchild =p;
} else { p->parent ->rchild =t; t->parent =p->parent ; t->lchild =p; p->parent =t; }
}
p=t; break; default:
t=(BiTNode *)malloc(sizeof(BiTNode)); t->lchild=NULL; t->rchild=NULL; t->parent=p; t->data=a[i]; t->op=0; p->rchild=t; p=t; } }
while(p) { T=p; p=p->parent ; } cout<<T->data <<endl; return T; } //CreatTree