Я пытаюсь создать дерево выражений, но не получаю соответствующего вывода. В этом коде я много раз пытался проверить ошибки в своем коде, но не могу найти ни одной. Пожалуйста, помогите мне решить ошибку в этой программе.
#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;
}
Некоторые отладка резиновой утки также могут быть очень полезны. Тем более, что ваша функция pop на самом деле не "выталкивает" последний узел в стеке.
Наконец, не используйте магические числа. Если вы, например, 65 означает, что значение в кодировке ASCII для 'A', а затем явно использовать вместо него 'A'. Или, что еще лучше, используйте стандартные функции классификации символов.
Какой ввод вы ввели, каков ожидаемый результат и каков фактический результат?
stack[top++] соединяется с stack[--top].
@RishikeshRaje, мой ввод - «AB-», ожидаемый вывод - «B-A», вывод, который я получаю, - «- B» (между минусом и B есть пробел)





Когда вы нажимаете узел, он становится новым корнем. Требуется соединение левого дерева и правого дерева.
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);
....
}
Я должен заменить оператор return в функции pop на
return stack[--top];
Пожалуйста, попробуйте сделать отступ в коде и добавить несколько пустых строк для создания абзацев. Это упростит чтение и понимание кода.