typedef char status;
typedef char Telemtype;
#define NULL 0
#define OK 1
typedef struct bitnode{
Telemtype data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
Creatbitree(bitree &t)
{
//先序创建二叉树
char ch;
scanf("%c",&ch);
if(ch=='*') t=NULL;
else{
t=(bitnode *)malloc(sizeof(bitnode));
if(!t) exit(0);
t->data=ch;
Creatbitree(t->lchild);
Creatbitree(t->rchild);
}
return OK;
}
status Leafcount(bitree t)
{
//统计二叉树中叶子结点的个数
if(!t)
return 0;
else if(t->lchild==0&&t->rchild==0)
return 1;
else
return Leafcount(t->lchild)+Leafcount(t->rchild);
}
status Depth(bitree t)
{
//计算该二叉树的深度
int dl,dr,d;
if(!t) return 0;
else
{
///////////#TODO7
dl=Depth(t->lchild);
dr=Depth(t->rchild);
if(dl>=dr) return d=1+dl;
if(dl<dr) return d=1+dr;
}
}
status Nodecount(bitree t)
{
//统计二叉树的总的结点数
int n,nl,nr;
if(!t) return 0;
else
{
///////////#TODO8
nl=Nodecount(t->lchild);
nr=Nodecount(t->rchild);
n=1+nl+nr;
}
return n;
}
void Preordertree(bitree t)
{
//先序序列遍历二叉树
if(t)
{
printf("%c",t->data);
Preordertree(t->lchild);
Preordertree(t->rchild);
}
}
void Inordertree(bitree t)
{
//中序序列遍历二叉树
if(t)
{
Inordertree(t->lchild);
printf("%c",t->data);
Inordertree(t->rchild);
}
}
void Pasttree(bitree t)
{
//后序序列遍历二叉树
if(t){
Pasttree(t->lchild);
Pasttree(t->rchild);
printf("%c",t->data);
}
}
编译执行结果例如以下:
<img src="//img-blog.csdn.net/20140530230219765" alt="" />