C 表达式树的顺序横截正确,但顺序横截错误
我试图编写一个程序,在给定前缀表达式的情况下,使用表达式树输出正确的中缀和后缀表达式。然而,我的程序似乎没有打印正确的后序横截。我的算法有什么问题吗C 表达式树的顺序横截正确,但顺序横截错误,c,C,我试图编写一个程序,在给定前缀表达式的情况下,使用表达式树输出正确的中缀和后缀表达式。然而,我的程序似乎没有打印正确的后序横截。我的算法有什么问题吗 void createExpTree(BTNode** root,char* prefix) { //Write your code here Stack s; s.head = NULL; s.size = 0; BTNode *temp; int intArray[SIZE]; i
void createExpTree(BTNode** root,char* prefix)
{
//Write your code here
Stack s;
s.head = NULL;
s.size = 0;
BTNode *temp;
int intArray[SIZE];
int theitem;
int y = 0;
char *x = prefix;
char c;
while(*x){
if(isdigit(*x)){
int val = (int)strtol(x,&x,10);
intArray[y++] = val;
}else{
x++;
}
}
int ctr = strlen(prefix);
int finalnum = 0;
int i;
for(i=ctr-1;i>=0;i--){
c = prefix[i];
if(c=='+'|| c=='-' || c=='*' || c=='/'){
temp = malloc(sizeof(BTNode));
temp->item = c;
temp->left = peek(s);
pop(&s);
temp->right = peek(s);
pop(&s);
push(&s,temp);
}else if(c!=' '){
theitem = intArray[y-finalnum];
temp = malloc(sizeof(BTNode));
temp->item = theitem;
finalnum++;
temp->left = NULL;
temp->right = NULL;
push(&s,temp);
i = i-intLen(theitem)+1;
}
}
*root = peek(s);
pop(&s);
}
编辑:我用以下输入测试了它
前缀:+99*-8877+/66-554433
输出是
中缀:99+88-77*66/55-44+33
后缀:9988-77*66/55-44+33+
后缀表达式是错误的
编辑2:
下面的代码生成上面的输出
void printTree(BTNode *node){
//Write your code here
char ch;
if(node==NULL) return;
printTree(node->left);
if(node->left==NULL && node->right==NULL){
printf("%d ", node->item);
}else{
ch = (char)node->item;
printf("%c ", ch);
}
printTree(node->right);
}
void printTreePostfix(BTNode *node){
//Write your code here
char ch;
if(node==NULL) return;
printTree(node->left);
printTree(node->right);
if(node->left==NULL && node->right==NULL){
printf("%d ", node->item);
}else{
ch = (char)node->item;
printf("%c ", ch);
}
}
您是否尝试过在调试器中单步执行它?它是否与你已经在纸上设计和书写/绘制的内容相同?遵循本指南中的提示,你将大大提高获得有用答案的机会。如果由于某种原因无法提供完整的代码,那么下一个最好的方法是详细说明一些失败的输入、意外输出是什么等等。。。我在你的代码片段中没有看到任何遍历代码,你确定问题不在这里吗?谢谢你的评论。我已经编辑了我的帖子,其中包括中缀是否正确可能有点乐观,如果你在单个子表达式周围加上括号,它可能也不完全正确。@dratenik假定给定的前缀表达式是正确的