(!q->lchild) {q->lchild=p;Push(&S,p);q=p;} else {q->rchild=p;Push(&S,p);q=p;} } else/* 不是运算符,运算符出栈*/ { if(!q->lchild) {q->lchild=p;Pop(&S,&q);} else {q->rchild=p;Pop(&S,&q);} } 9 } if(StackEmpty(S)&&i>=len) return OK;/* 栈空且 i>=len ,说明输入的表达式是正确的*/ else /*输入的表达式是错误的*/ { printf("\n 输入的表达式有误! "); return ERROR; }}} Status pare(char c1,char c2) { if((c1=='^'||c1=='*'||c1=='-'||c1=='+'||c1=='/')&&(c2=='^'||c2=='*'||c2=='-'||c2=='+'||c2=='/')) {/*c1 和 c2为运算符*/ if(c1=='^')/*c1 为指数运算符,则当 c2不为'^'时, c1比 c2优先*/ { if(c2!='^') return OK; else return ERROR; } else if(c1=='*'||c1=='/')/*c1 为乘法或除法运算符,则当 c2为'+'或'-', c1比 c2优先*/ { if(c2=='^'||c2=='*'||c2=='/') return ERROR; else return OK; } else return ERROR;/* 其余, c1不比 c2优先*/ } else return ERROR;/*c1 和 c2不是运算符*/ } /*用带括弧的中缀表达式输入表达式*/ void WriteExpr(BiTree E)