Поиск ошибки в создании дерева выражений - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь создать дерево выражений, но не получаю соответствующий вывод.В этом коде я много раз пытался проверить ошибки в своем коде, но я не могу их найти.Пожалуйста, кто-нибудь, помогите мне устранить ошибку в этой программе.

#include<stdio.h>
#include<stdlib.h>

struct tree
{
    char a;
    struct tree *llink;
    struct tree *rlink;
} *stack[20];

int top=0;

void push(struct tree* root)
{
    stack[top]=root;
    top++;
}

struct tree* pop()
{
    return stack[top--];
}

void inorderdisplay(struct tree *temp)
{
    if (temp!=NULL) {
        inorderdisplay(temp->llink);
        printf("%c ",temp->a);
        inorderdisplay(temp->rlink);
    }
}

int main()
{
    int i;
    struct tree *root;
    char exp[100];

    scanf("%s",exp);

    for (i=0; exp[i]!='\0'; i++) {
        root=(struct tree *)malloc(sizeof(struct tree));
        root->a=exp[i];
        root->llink=NULL;
        root->rlink=NULL;

        if( exp[i]>=65 && exp[i]<=90);
        else {
            root->llink=pop();
            root->rlink=pop();
        }
        push(root);
    }
    inorderdisplay(stack[0]);

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я должен заменить оператор возврата в функции pop на

return stack[--top];
0 голосов
/ 04 декабря 2018

Когда вы нажимаете на узел, он становится новым корнем.Требуется соединение левого дерева и правого дерева.

struct tree* push(struct tree* node, struct tree* root,
                                int join_left)
{
   if(join_left)
     node->llink=root;
  else
    node->rlink=root;

  return node;
}

В основном

int main(void)
{
  struct tree *root=NULL;

   ....
  node = malloc(sizeof struct tree);
  node->llink=NULL;
  node->rlink=NULL;

     ...
     root = push(node, root, 1);

    ....
}
...