好久没有写博客了,期末考试和课程设计让我似乎快忘记了我是一名考研党,最近事情都弄完了,可以安心准备考研了。
考研进行时——二叉树的。
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BT
{
ElemType data;
struct BT *lch,*rch;
}BT;
BT * CreateBT(); //先序建立二叉树
void preorder(BT *T); //二叉树的先序遍历
void inorder(BT *T); //二叉树的先序遍历
void postorder(BT *T); //二叉树的先序遍历
int leafnum(BT *T); //求二叉树的叶子节点
int Nodenum(BT *T); //求二叉树的节点总数
int depth(BT *T); //求二叉树的深度
int main()
{
BT *T=NULL;
printf("请输入要创建的树:");
T=CreateBT();
printf("\n前序遍历序列: ");
preorder(T);
printf("\n中序遍历序列: ");
inorder(T);
printf("\n后序遍历序列: ");
postorder(T);
printf("\n树中叶子节点的个数是: ");
printf("%d",leafnum(T));
printf("\n树中总的节点的个数是: ");
printf("%d",Nodenum(T));
printf("\n树的深度是:");
printf("%d",depth(T));
return 0;
}
BT * CreateBT()
{
BT *t;
char c;
scanf("%c",&c);
if(c=='#')t=NULL;
else
{
t=(BT*)malloc(sizeof(BT));
t->data=c;
t->lch=CreateBT();
t->rch=CreateBT();
}
return t;
}
void preorder(BT *T)
{
if(T==NULL)return;
else
{
printf("%c ",T->data);
preorder(T->lch);
preorder(T->rch);
}
}
void inorder(BT *T)
{
if(T==NULL)return;
else
{
inorder(T->lch);
printf("%c ",T->data);
inorder(T->rch);
}
}
void postorder(BT *T)
{
if(T==NULL)return;
else
{
postorder(T->lch);
postorder(T->rch);
printf("%c ",T->data);
}
}
int leafnum(BT *T)
{
if(T==NULL)
return 0;
if(T->lch==NULL&&T->rch==NULL)
return 1;
return leafnum(T->lch)+leafnum(T->rch);
}
int Nodenum(BT *T)
{
if(T==NULL )
return 0;
else
return Nodenum(T->lch)+Nodenum(T->rch)+1;
}
int depth(BT *T)
{
int dep1,dep2;
if(T==NULL)return 0;
else
{
return depth(T->lch)>depth(T->rch)?depth(T->lch)+1:depth(T->rch)+1;
}
}
运行结果:
该树的原型是: