可运行c语言数据结构课程设计二叉树相关操作源代码
#include
#include
#define MAXSIZE 1000
structBiTNode{
int c;
intlchild,rchild;
}BiTNode,*BiTree;
structBiTNode tree[MAXSIZE];
void creat()//创建二叉树函数
{
inti,j;
printf("需要输入权值个数:\n");
scanf("%d",&j);
if (j<8)
//判断二叉树是否达到4层
{
printf("错误:二叉树的层数少于4层!\n");
return;
}
printf("开始输入权值:\n");
for(i=1;i<=j;i=i+1)//权值的录入
{
scanf("%d",&tree[i].c);
tree[i].lchild=2*i;
tree[i].rchild=2*i+1;
}
printf("成功创建二叉树\n");
}
int leaves()//统计叶子个数函数
{
intl,i;
l=0;
for (i=1;tree[i].c!=NULL;i++)
//计算二叉树结点的个数
{
l++;
}
if ((l%2))
//判断结点的奇偶性从而计算叶子的个数
{
return(((l-1)/2)+1);
}
else
return(l/2);
}
int deep()//求二叉树的深度
{
intd,i,sum;
sum=1;
for (i=1;tree[i].c!=NULL;i++);
//计算二叉树结点的个数
for (d=1;sum<=i;d++)
//求出二叉树的深度
{
if (d!=1)
{
sum=sum+sum*2;
}
}
return(d-1);
}
void qian(int a)//前序遍历输出列
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
{
if (tree[a].c!=NULL)
//判断当前结点是否有值,若有执行如下操作,若无则返回上一层
{
printf("%d,",tree[a].c);
//首先输出当前结点(根节点)的权值
qian((a*2));
//递归调用,用当前结点的左孩子作根节点重复当前函数的操作
qian((a*2+1));
//递归调用,用当前结点的右孩子作根节点重复当前函数的操作}
else
return;
}
void zhong(int a)//中序遍历输出列表
{
if (tree[2*a].c!=NULL)
//首先判断当前结点的左孩子是否为空,不是就进行递归调用,用当前结点的左孩子作
根节点重复当前函数的操作
{
zhong((2*a));
}
printf("%d,",tree[a].c);
//输出当前结点的权值
if (tree[2*a+1].c!=NULL)
//判断当前结点的右孩子是否为空,不是就进行递归调用,用当前结点的右孩子作根节点重复当前函数的操作
{
zhong((2*a+1));
}
}
void hou(int a)//后序遍历输出序列
{
if (tree[2*a].c!=NULL)
//判断当前结点的左孩子是否为空,不是就进行递归调用,用当前结点的左孩子作根节点重复当前函数的操作
{
hou((2*a));
}
if (tree[2*a+1].c!=NULL)
//判断当前结点的右孩子是否为空,不是就进行递归调用,用当前结点的右孩子作根节点重复当前函数的操作
{
hou((2*a+1));
}
printf("%d,",tree[a].c);
//输出当前结点的权值
}
void main()
{
intd,l,i;
i=10;
printf("******************目录******************\n");
printf("1、创建二叉树\n");
printf("2、统计叶子个数\n");
printf("3、求二叉树的深度\n");
printf("4、前序遍历输出列表\n");
printf("5、中序遍历输出列表\n");
printf("6、后序遍历输出序列\n");
printf("0、退出操作\n");
printf("*****************************************\n"); while(i!=0)
{
printf("选择操作:\n");
scanf("%d",&i);
if(i==0)
{
break;
}
else if(i==1)
{
printf("开始创建二叉树(层数不少于4层)\n");
creat();
}
else if(i==2)
{
l=leaves();
printf("叶子个数为:%d\n",l);
}
else if(i==3)
{
d=deep();
printf("二叉树的深度是%d\n",d);
}
else if(i==4)
{
printf("用前序遍历输出的结果是:\n");
qian(1);
printf("\n");
}
else if(i==5)
{
printf("用中序遍历输出的结果是:\n");
zhong(1);
printf("\n");
}
else if(i==6)
{
printf("用后序遍历输出的结果是:\n");
hou(1);
printf("\n");
}
else
printf("错误:没有该操作!\n");
}
printf("欢迎使用!\n");
}