#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#define m0 100
#define NULL 0
typedef struct BitNode
{
int data;
struct BitNode *lchild,*rchild;
} BitNode;
BitNode *CreatTree(BitNode *First)
{int ch;
printf("Number:");
scanf("%d",&ch);
if (ch==0) First=NULL;
else{ First=(BitNode *)malloc(sizeof(BitNode));
First->data=ch;
First->lchild=CreatTree(First->lchild);
First->rchild=CreatTree(First->rchild);
}
return(First);
}
void PreOrder (BitNode * First)
{ if(First) {printf("%d",First->data);
PreOrder(First->lchild);
PreOrder(First->rchild);
}
}
void InOrder(BitNode * First)
{if(First) { InOrder(First->lchild);
printf("%d",First->data);
InOrder(First->rchild);
}
}
void PostOrder (BitNode * b)
{BitNode * stack[m0],*p;
int tag[m0],top=0;
p=b;
do { while (p!=NULL)
{top++;
stack[top]=p;
tag[top]=0;
p=p->lchild;
}
if(top>0)
{p=stack[top];
if(tag[top]==1)
{top--;
printf("%d",p->data);
}
if(top>0)
{p=p->rchild;
tag[top]=1;
}
}
}while (p!=NULL&&top!=0);
}
main ()
{int a;
BitNode * T;
T=NULL;
printf("\n%s\n","1. Creat BitNode");
printf("%s\n","2. Output PreOrder");
printf("%s\n","3. Output InOnder");
printf("%s\n","4. Output PostOrder");
printf("%s\n","0. Quit");
printf("%s\n","Please Insert a number 0-4");
scanf("%d",&a);
while(a!=0)
{
switch(a){
case 1: T=CreatTree(T);printf("!!!");break;
case 2: PreOrder(T);break;
case 3: InOrder(T);break;
case 4: PostOrder(T);
}
scanf("%d",&a);
}
}