#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define max 31
typedef struct StackNode* PtrStack;
struct StackNode
{
int stack[max];
int position;
};
typedef PtrStack Stack;
Stack CreateStack();
void Push(Stack mystack, int a);
int Pop(Stack mystack);
void Traversal(int* midorder, int left, int right, int cnt, int* flag, int* flag2);
int search(int target, int* midorder, int cnt);
int main()
{
int cnt;
char* cmp = "Push";
char* tmp = (char*)malloc(sizeof(char) * 5);
int tmpnum;
scanf("%d", &cnt);
int* midorder = (int*)malloc(sizeof(int) * cnt);
int* preorder = (int*)malloc(sizeof(int) * cnt);
int* flag = (int*)malloc(sizeof(int) * cnt);
for (int i = 0; i < cnt; i++)
{
preorder[i] = i + 1;
flag[i] = 0;
}
int j = 0;
Stack input = CreateStack();
for (int i = 0; i < cnt * 2; i++)
{
scanf("%s", tmp);
if (!strcmp(tmp, cmp))
{
scanf("%d", &tmpnum);
Push(input, tmpnum);
}
else
{
midorder[j++] = Pop(input);
}
}
// for (int i = 0; i < cnt; i++)
// {
// printf("preorder = %d, midorder = %d\n", preorder[i], midorder[i]);
// }
int* flag2 = (int*)malloc(sizeof(int));
*flag2 = 0;
Traversal(midorder, 0, cnt - 1, cnt, flag, flag2);
return 0;
}
Stack CreateStack()
{
Stack mystack = (Stack)malloc(sizeof(struct StackNode));
mystack->position = -1;
return mystack;
}
void Push(Stack mystack, int a)
{
mystack->stack[++mystack->position] = a;
return;
}
int Pop(Stack mystack)
{
if (mystack->position >= 0)
{
return mystack->stack[mystack->position--];
}
else
{
return -1;
}
}
void Traversal(int* midorder, int left, int right, int cnt, int* flag, int* flag2)
{
int target = 0;
for (int i = 0; i < cnt; i++)
{
if (!flag[i])
{
flag[i] = 1;
target = i + 1;
break;
}
}
int pos = search(target, midorder, cnt);
if (pos > left)
{
Traversal(midorder, left, pos - 1, cnt, flag, flag2);
}
if (pos < right)
{
Traversal(midorder, pos + 1, right, cnt, flag, flag2);
}
if (!*flag2)
{
*flag2 = 1;
}
else
{
printf(" ");
}
printf("%d", target);
return;
}
int search(int target, int* midorder, int cnt)
{
int i = 0;
for (; i < cnt; i++)
{
if (midorder[i] == target)
{
break;
}
}
return i;
}
不知代码逻辑错误在哪
题目是什么?