数据结构实验6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(x
p=p->lchild;
else
p=p->rchild;
}
if(x
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(x
p=p->lchild;
else
p=p->rchild;
}
if(x
q->lchild=s;
else