数据结构实验6

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

《数据结构》实验报告

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

①列出所有的叶子结点; K,L,F,M,H,I,J

②列出G结点的双亲; B

③列出E结点的孩子; K.L

④列出I结点所有的堂兄弟; E,F,G,H

⑤列出B结点所有的子孙; E,F,G,K,L,M

1、#include

#include

typedef int TElemType;

typedef struct BiTNode

{

TElemType data;

struct BiTNode *lchild,*rchild;

}BiNode, *Bitree;

DLR( Bitree root )

{ if (root !=NULL) { //非空二叉树

printf("%d",root->data); //访问D

DLR(root->lchild); //递归遍历左子树

DLR(root->rchild); //递归遍历右子树}

return(0);

}

LDR(Bitree root)

{ if(root !=NULL)

{

LDR(root->lchild);

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

LDR(root->rchild);

}

return(0);}

LRD (Bitree root)

{ if(root !=NULL) {

LRD(root->lchild);

LRD(root->rchild);

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

}

return(0);

}

Bitree root;//定义根结点

void insert_data(int x) /*生成/树*/

{

Bitree p,q,s;

s=(Bitree)malloc(sizeof(BiNode)); //创建结点

s->data=x; //结点赋值

s->lchild=NULL;

s->rchild=NULL;

if(!root)

{

root=s;

}

else

{

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 main() /*先生成二叉排序树*/

{

int i=1,x; //i记录结点个数,x存放结点值

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

printf("请输入数据,-9999表示输入结束\n");

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("\nDLR:");

DLR(root);

printf("\nLDR:");

LDR(root);

printf("\nLRD:");

LRD(root);

printf("\n");

}

2、#include

#include

typedef int TElemType;

typedef struct BiTNode

{

TElemType data;

struct BiTNode *lchild,*rchild;

}BiNode, *Bitree;

Bitree root;//定义根结点

int CountLeaf (Bitree root)

{ //返回指针T所指二叉树中所有叶子结点个数

int m,n;

if (!root ) return 0;

if (!root->lchild && !root->rchild) return 1;

else {

m = CountLeaf( root->lchild); n = CountLeaf( root->rchild);

return (m+n);

} //else

} // CountLeaf

void insert_data(int x) /*生成/树*/

{

Bitree p,q,s;

s=(Bitree)malloc(sizeof(BiNode)); //创建结点

s->data=x; //结点赋值

s->lchild=NULL;

s->rchild=NULL;

if(!root)

{

root=s;

}

else

{

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

相关文档
最新文档