能否详细说下错误的两种情况是为啥
#include <stdio.h>
#include <stdlib.h>
#define NULL0 -1
typedef struct stack0{
int top;
int DataArray[35];
}*Stack;
typedef struct TreeNode{
int data;
int left;
int right;
}TN[100];
TN NodeList;
void Init_Tree(TN NodeList,Stack S){
int num;
char ch;
//用有限状态机来读入数据,PrevState标记上次是pop还是push,用lastptr和thisptr记录不同状态下的父子节点下标
int LastPtr = 0,ThisPtr;
enum {PUSH,POP};
int PrevState = PUSH;
scanf("%d",&num);
//由于数组下标不能为负,0在下面又作为1的父节点,就用99代表所有空节点,值赋为-1
for (int i = 1; i <= 99; i++)
NodeList[i].left = NodeList[i].right = 99;
NodeList[99].data = NULL0;
//只有单词的第二个字母是决定性的,所以用getchar来消耗没用的字母、空格、换行符
getchar();
for (int i = 1; i <= 2*num; i++)
{
getchar();
ch = getchar();
if (ch == 'u')
{
getchar();
getchar();
getchar();
ThisPtr = (int)(getchar() - '0');
if (PrevState == PUSH)
{
NodeList[ThisPtr].data = ThisPtr;
NodeList[LastPtr].left = ThisPtr;
Push(S,ThisPtr);
LastPtr = ThisPtr;
PrevState = PUSH;
getchar();
}
else if (PrevState == POP)
{
NodeList[ThisPtr].data = ThisPtr;
NodeList[LastPtr].right = ThisPtr;
Push(S,ThisPtr);
LastPtr = ThisPtr;
PrevState = PUSH;
getchar();
}
}
else if (ch == 'o')
{
if (PrevState == PUSH)
{
getchar();
getchar();
PrevState = POP;
Pop(S);
continue;
}
else if (PrevState == POP)
{
getchar();
getchar();
PrevState = POP;
LastPtr = Pop(S);
}
}
}
}
//递归输出结果
void PostOrder(TN NodeList,int i){
if (NodeList[i].data == NULL0)
return;
else
PostOrder(NodeList,NodeList[i].left);
PostOrder(NodeList,NodeList[i].right);
NodePrint(NodeList[i].data);
}
void NodePrint(int data){
if (data != 1) printf("%d ",data);
else printf("%d",data);
}
Stack Init_Stack(){
Stack S = (Stack)malloc(sizeof(struct stack0));
S->top = -1;
return S;
}
void Push(Stack S,int data){
S->DataArray[++S->top] = data;
}
int Pop(Stack S){
return S->DataArray[S->top--];
}
int main(){
Stack S = Init_Stack();
Init_Tree(NodeList,S);
PostOrder(NodeList,1);
while (1);
return 0;
}