/*二叉树 |
*/ |
typedef struct bitnode |
{ |
char data; |
struct bitnode *lchild, *rchild; |
} bitnode, *bitree; |
void createbitree ( t,n ) |
bitnode ** t; |
int *n; |
{ |
char x; |
bitnode *q; |
*n=*n+1; |
printf ( "\n Input %d DATA:" ,*n ); |
x= getchar (); |
if ( x!= '\n' ) getchar (); |
if ( x== '\n' ) |
return ; |
q= ( bitnode* ) malloc ( sizeof ( bitnode ) ); |
q->data=x; |
q->lchild=NULL; |
q->rchild=NULL; |
*t=q; |
printf ( " This Address is: %o, Data is: %c,\n Left Pointer is: %o, Right Pointer is: %o" ,q,q->data,q->lchild,q->rchild ); |
createbitree ( &q->lchild,n ); |
createbitree ( &q->rchild,n ); |
return ; |
} |
void visit ( e ) |
bitnode *e; |
{ |
printf ( " Address: %o, Data: %c, Left Pointer: %o, Right Pointer: %o\n" ,e,e->data,e->lchild,e->rchild ); |
} |
void preordertraverse ( t ) |
bitnode *t; |
{ |
if ( t ) |
{ |
visit ( t ); |
preordertraverse ( t->lchild ); |
preordertraverse ( t->rchild ); |
return ; |
} |
else |
return ; |
} |
void countleaf ( t,c ) |
bitnode *t; |
int *c; |
{ |
if ( t!=NULL ) |
{ |
if ( t->lchild==NULL && t->rchild==NULL ) |
{ |
*c=*c+1; |
} |
countleaf ( t->lchild,c ); |
countleaf ( t->rchild,c ); |
} |
return ; |
} |
int treehigh ( t ) |
bitnode *t; |
{ |
int lh,rh,h; |
if ( t==NULL ) |
h=0; |
else |
{ |
lh=treehigh ( t->lchild ); |
rh=treehigh ( t->rchild ); |
h= ( lh>rh ? lh:rh ) +1; |
} |
return h; |
} |
main() |
{ |
bitnode *t; |
int count=0; |
int n=0; |
printf ( "\n Please input TREE Data:\n" ); |
createbitree ( &t,&n ); |
printf ( "\n This is TREE struct: \n" ); |
preordertraverse ( t ); |
countleaf ( t,&count ); |
printf ( "\n This TREE has %d leaves " ,count ); |
printf ( " , High of The TREE is: %d\n" ,treehigh ( t ) ); |
} |