#include <stdio.h> /* EOF(=^Z F6),NULL */
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status; /* Status , , OK */
#if CHAR
typedef char TElemType;
TElemType Nil=' '; /* */
#else
typedef int TElemType;
TElemType Nil=0; /* 0 */
#endif
#define MAX_TREE_SIZE 100 /* */
typedef TElemType SqBiTree[MAX_TREE_SIZE]; /* 0 */
Status InitBiTree(SqBiTree T)
{ /* T。 T , , & */
int i;
for(i=0;i<MAX_TREE_SIZE;i++)
T[i]=Nil; /* */
return OK;
}
Status CreateBiTree(SqBiTree T)
{ /* ( ), T */
int i=0;
#if CHAR
int l;
char s[MAX_TREE_SIZE];
printf(" ( ), , ≤%d:
",MAX_TREE_SIZE);
gets(s); /* */
l=strlen(s); /* */
for(;i<l;i++) /* T */
{
T[i]=s[i];
if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil) /* ( ) */
{
printf(" %c
",T[i]);
exit(ERROR);
}
}
for(i=l;i<MAX_TREE_SIZE;i++) /* T */
T[i]=Nil;
#else
printf(" ( ),0 , 999 。 ≤%d:
",MAX_TREE_SIZE);
while(1)
{
scanf("%d",&T[i]);
if(T[i]==999)
break;
if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil) /* ( ) */
{
printf(" %d
",T[i]);
exit(ERROR);
}
i++;
}
while(i<MAX_TREE_SIZE)
{
T[i]=Nil; /* T */
i++;
}
#endif
return OK;
}
Status BiTreeEmpty(SqBiTree T)
{ /* : T */
/* : T , TRUE, FALSE */
if(T[0]==Nil) /* , */
return TRUE;
else
return FALSE;
}
Status(*VisitFunc)(TElemType); /* */
void InTraverse(SqBiTree T,int e)
{ /* InOrderTraverse() */
if(T[2*e+1]!=Nil) /* */
InTraverse(T,2*e+1);
VisitFunc(T[e]);
if(T[2*e+2]!=Nil) /* */
InTraverse(T,2*e+2);
}
Status InOrderTraverse(SqBiTree T,Status(*Visit)(TElemType))
{ /* : ,Visit */
/* : T, Visit 。 */
/* Visit() , */
VisitFunc=Visit;
if(!BiTreeEmpty(T)) /* */
InTraverse(T,0);
printf("
");
return OK;
}
Status visit(TElemType e)
{
printf("%d ",e);
return OK;
}
void main()
{
SqBiTree T;
InitBiTree(T);
CreateBiTree(T);
printf(" :
");
InOrderTraverse(T,visit);//
}