[c]代码库
/*二叉树
*/
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 ) );
}