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假定给定的前缀表达式是正确的