这个二叉树的后续遍历为什么不出循环?(先序构造)
#include<stdio.h>#include<stdlib.h>
typedef struct Node
{
char data;
struct Node *LChild;
struct Node *RChild;
}BiNode,*Bitree;
Bitree s2[10],s3[10];
char s1[10];
void CreateBitree(Bitree *bt)
{
(*bt)=(Bitree)malloc(sizeof(BiNode));
(*bt)->LChild=NULL; (*bt)->RChild=NULL;
int top=1;
Node *p;
p=*bt;
char ch;
ch=getchar();
s1[top]=ch;
s2[top]=p;
do
{
while((ch=getchar())!=' ')
{
if(ch=='\n') break;
top++;
if(p->LChild!=NULL)
{
p->RChild=(Bitree)malloc(sizeof(BiNode));
p=p->RChild; p->LChild=NULL; p->RChild=NULL;
}
else{
p->LChild=(Bitree)malloc(sizeof(BiNode));
p=p->LChild; p->LChild=NULL; p->RChild=NULL;
}
s2[top]=p;
s1[top]=ch;
}
if(top!=0)
{
p=s2[top];
p->data=s1[top];
top--;
}
}while(ch!='\n');
}
void PostOrder(Bitree root)
{
Bitree p=root,m;
int top=0; s3[0]=NULL;
do
{
while(p!=NULL)
{
top++;
s3[top]=p;
p=p->LChild;
}
if(top!=0)
{
p=s3[top];
while(p->RChild==NULL)
{
printf("%c ",p->data,top);
top--;
m=p;
p=s3[top];
}
if(p->RChild!=NULL)
{
while(p->RChild==m&&top!=0)
{
printf("%c ",p->data,top);
top--;
m=p;
p=s3[top];
}
if(p!=NULL&&p->RChild!=m)
{
p=p->RChild;
}
}
}
}while(p!=NULL||top!=0);
printf("出循环!");
}
int main()
{
Bitree root;
CreateBitree(&root);
printf("\n后序遍历:");
PostOrder( root);
}