#include
typedef struct BinTNode{
char data;
struct BinTNode *lchild,*rchild;
}BinTNode,*BinTree;
int Initiate(BinTree *bt)
{
if((*bt=(BinTNode *)malloc(sizeof(BinTNode)))==NULL)return 0;
(*bt)->lchild=NULL;
(*bt)->rchild=NULL;
return 1;
}
void CreateBinTree(BinTree *T)
{
char ch;
scanf("\n%c",&ch);
if(ch=='0') (*T)=NULL;
else
{
(*T)=(BinTNode *)malloc(sizeof(BinTNode));
(*T)->data=ch;
CreateBinTree(&(*T)->lchild);
CreateBinTree(&(*T)->rchild);
}
}
void PreOrderOut(BinTree T)
{
if(T)
{
printf("%3c",T->data);
PreOrderOut(T->lchild);
PreOrderOut(T->rchild);
}
}
void inorderout(BinTree T)
{
if(T)
{
inorderout(T->lchild);
printf("%3c",T->data);
inorderout(T->rchild);
}
}
void PostOrderOut(BinTree T)
{
if(T)
{
PostOrderOut(T->lchild);
PostOrderOut(T->rchild);
printf("%3c",T->data);
}
}
void displayBinTree(BinTree T)
{
BinTree stack[100],p;
int level[100],top,n,i;
if(T!=NULL)
{
top=1;
stack[top]=T;
level[top]=3;
while(top>0)
{
p=stack[top];
n=level[top];
for(i=1;i<=n;i++)
printf(" ");
printf("%c",p->data);
for(i=n+1;i<50-n;i+=2)
printf("-");
printf("\n");
top--;
if(p->rchild!=NULL)
{
top++;
stack[top]=p->rchild;
level[top]=n+3;
}
if(p->lchild!=NULL)
{
top++;
stack[top]=p->lchild;
level[top]=n+3;
}
}
}
}
void main()
{
BinTree bt;
Initiate(&bt);
CreateBinTree(&bt);
PreOrderOut(bt);
printf("\n");
displayBinTree(bt);
printf("\n");
inorderout(bt);
printf("\n");
PostOrderOut(bt);
printf("\n");
}