void PreOrder ( BiTree T) {
if ( T!= NULL ) {
printf ( "%c" , T-> data) ;
PreOrder ( T-> lchild) ;
PreOrder ( T-> rchild) ;
}
}
void PostOrder ( BiTree T) {
if ( T!= NULL ) {
PostOrder ( T-> lchild) ;
PostOrder ( T-> rchild) ;
printf ( "%c" , T-> data) ;
}
}
void InOrder ( BiTree T) {
if ( T!= NULL ) {
InOrder ( T-> lchild) ;
printf ( "%c" , T-> data) ;
InOrder ( T-> rchild) ;
}
}
void LevelOrder ( BiTree T) {
LinkQueue Q;
InitLinkQueue ( Q) ;
BiTree t;
EnLinkQueue ( Q, T) ;
while ( ! IsEmpty ( Q) ) {
DeLinkQueue ( Q, t) ;
putchar ( t-> data) ;
if ( t-> lchild!= NULL ) {
EnLinkQueue ( Q, t-> lchild) ;
}
if ( t-> rchild!= NULL ) {
EnLinkQueue ( Q, t-> rchild) ;
}
}
}
int main ( ) {
BiTree pnew;
BiTree tree= NULL ;
BiElemType c;
ptag_t phead= NULL , ptail= NULL , list_pnew= NULL , pcur;
while ( scanf ( "%c" , & c) ) {
if ( c== '\n' ) {
break ;
}
pnew= ( BiTree) calloc ( 1 , sizeof ( BiTNode) ) ;
pnew-> data= c;
list_pnew= ( ptag_t) calloc ( 1 , sizeof ( tag_t) ) ;
list_pnew-> p= pnew;
if ( tree== NULL ) {
tree= pnew;
phead= list_pnew;
ptail= list_pnew;
pcur= list_pnew;
} else {
ptail-> pnext= list_pnew;
ptail= list_pnew;
if ( NULL == pcur-> p-> lchild) {
pcur-> p-> lchild= pnew;
} else if ( NULL == pcur-> p-> rchild) {
pcur-> p-> rchild= pnew;
pcur= pcur-> pnext;
}
}
}
PreOrder ( tree) ;
printf ( "----------PreOrder\n" ) ;
PostOrder ( tree) ;
printf ( "----------PostOrder\n" ) ;
InOrder ( tree) ;
printf ( "----------InOrder\n" ) ;
LevelOrder ( tree) ;
printf ( "----------LevelOrder\n" ) ;
return 0 ;
}