厦门理工学院数据结构实验6

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实验报告

实验序号:6 实验项目名称:树和二叉树的操作

2.编写函数实现计算叶节点个数。

附源程序清单:

#include

#include

#define max 50

typedef struct liuyu

{

int data;

struct liuyu *lchild,*rchild;

}test;

liuyu *root,*p,*q[max];

int sum=0;

int m=sizeof(test);

void insert_data(int x) /*生成二叉排序树*/

{

liuyu *p,*q,*s;

s=(test*)malloc(m);

s->data=x;

s->lchild=NULL;

s->rchild=NULL;

if(!root)

{

root=s;

}

p=root;

while(p) /*如何接入二叉排序树的适当位置*/ {

q=p;

if(p->data==x)

{

printf("data already exist! \n");

return;

}

else if(xdata)

p=p->lchild;

else

p=p->rchild;

}

if(xdata)

q->lchild=s;

else

q->rchild=s;

}

void Preorder(liuyu *bt) //先序遍历输出

{

if(bt)

{

printf("%d ",bt->data);

Preorder(bt->lchild);

Preorder(bt->rchild);

}

}

void Inorder(liuyu *bt) //中序遍历输出

{

if(bt)

{

Inorder(bt->lchild);

printf("%d ",bt->data);

Inorder(bt->rchild);

}

}

void Postorder(liuyu *bt) //后序遍历输出

{

if(bt)

{

Postorder(bt->lchild);

Postorder(bt->rchild);

printf("%d ",bt->data);

}

}

int Leafnum(liuyu *bt)

{

int i=0,j,k;

if(bt==NULL) return 0;

if(bt->lchild==NULL&&bt->rchild==NULL) i++;

j=Leafnum(bt->lchild);

k=Leafnum(bt->rchild);

return i+j+k;

}

void main() /*先生成二叉排序树*/

{

int i,x;

i=1;

root=NULL; /*千万别忘了赋初值给root!*/

do

{

printf("please input data%d:",i);

i++;

scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/

if(x==-9999){

printf("\nNow output data value:\n");

}

else

insert_data(x); /*调用插入数据元素的函数*/

}while(x!=-9999);

printf("先序遍历输出:");

Preorder(root);

printf("\n中序遍历输出:");

Inorder(root);

printf("\n后序遍历输出:");

Postorder(root);

printf("\n叶子总数为:");

printf("%d\n",Leafnum(root)); }

相关文档
最新文档