太原理工数据结构实验报告 实验二树.docx
- 文档编号:2800821
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:13
- 大小:76.91KB
太原理工数据结构实验报告 实验二树.docx
《太原理工数据结构实验报告 实验二树.docx》由会员分享,可在线阅读,更多相关《太原理工数据结构实验报告 实验二树.docx(13页珍藏版)》请在冰豆网上搜索。
太原理工数据结构实验报告实验二树
实验报告
课程名称:
数据结构B
实验项目:
树
实验地点:
实验楼110
专业班级:
计科1301班学号:
2013001989
学生姓名:
杨喆
指导教师:
孟亮
2015年1月1日
一、实验目的和要求
熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。
二、实验内容和原理
1.编写递归算法,计算二叉树中叶子结点的数目。
2.编写递归算法,在二叉树中求位于先序序列中第K个位置的结点。
3.将上述例题用非递归程序实现。
三、主要仪器设备
1.设备:
PC微机;
2.实验环境:
windows操作系统;VC++6.0,
四、实验结果与分析(必填)
(1)程序代码:
实验2_1,2_2:
#include"stdio.h"
#include"malloc.h"
#defineOK1
#defineERROR0
#defineOVERFLOW-2
#defineNULL0
intn=0;
typedefcharTElemType;
typedefintStatus;
typedefstructBiTNode
{
TElemTypedata;
structBiTNode*lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
StatusCreateBiTree(BiTree&T)//递归创建一棵树
{
charch;
ch=getchar();//needinput'12##3##'
if(ch=='#')T=NULL;
else
{
if(!
(T=(BiTNode*)malloc(sizeof(BiTNode))))
return(OVERFLOW);//**********————————为什么要加括号
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
returnOK;}//CreateBiTree
StatusPreOrderTraverse(BiTreeT,int&n)
{
if(T)
{
printf("%c",T->data);
n++;
if(PreOrderTraverse(T->lchild,n))
{
if(T->data)
if(PreOrderTraverse(T->rchild,n))
{
returnOK;
}
}
//if(InOrderTraverse(T->lchild,Visit))
//if(Visit(T->data))
//if(InOrderTraverse(T->rchild,Visit))
//returnOK;
returnERROR;
}else
returnOK;
}//PreOrderTraverse
voidCountLeaf(BiTreeT,int&count)//实验一
{
if(T)
{
//if((!
T->lchild)||(!
T->rchild))
count++;//对叶子结点及数
CountLeaf(T->lchild,count);
CountLeaf(T->rchild,count);
}//CountLeaf
}
StatusFind_k_Node(BiTreeT,intk,int&i)//实验二
{
if(T)
{
i++;
if(i==k)
printf("您得到的结点为%c",T->data);
Find_k_Node(T->lchild,k,i);
Find_k_Node(T->rchild,k,i);
}
returnOK;
}
Statusmenu_select()
{
intsn;
for(;;)
{
printf("\n请输入您要进行的功能选项");
scanf("%d",&sn);
getchar();
if(sn<1||sn>4)
printf("\n\t输入错误,请重新输入\n");
else
break;
}
returnsn;
}
voidmain()
{
intn=0,k,i;
BiTreeT;
printf("1.创建一棵树并输出;\n2.统计结点数(递归算法);\n3.获取输入节点所在的位置(递归算法);\n4.结束;\n");
while
(1)
{
switch(menu_select())
{
case1:
printf("\n创建一棵树,按先序遍历一次输完所有结点,空结点输入#\n");
CreateBiTree(T);
getchar();
PreOrderTraverse(T,n);
printf("\n");
break;
case2:
n=0;
CountLeaf(T,n);
printf("该树的结点数量为:
%d\n",n);
printf("\n");
break;
case3:
printf("请输入你您获取的结点位置:
k=");
scanf("%d",&k);
i=0;
Find_k_Node(T,k,i);
printf("\n\n");
break;
case4:
printf("\nend\n");
return;
}
}
}
实验2_3:
#include
#include
#include
#defineOK1
#defineERROR0
#defineOVERFLOW-2
#defineNULL0
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
typedefcharTElemType;
typedefcharSElemType;
typedefintStatus;
typedefstructBiTNode
{
TElemTypedata;
structBiTNode*lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
//队列
typedefstruct
{
BiTree*base;
BiTree*top;
intstacksize;
}SqStack;
StatusInitStack(SqStack&S)
{
S.base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree));
if(!
S.base)
exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
}
StatusGetTop(SqStack&S,BiTree&T)
{
if(S.top==S.base)
returnERROR;
T=*(S.top-1);
returnOK;
}
StatusPush(SqStack&S,BiTreeT)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(BiTree*)malloc((STACKINCREMENT+S.stacksize)*sizeof(BiTree));
if(!
S.base)
exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=T;
returnOK;
}
StatusPop(SqStack&S,BiTree&T)
{
if(S.top==S.base)
returnERROR;
T=*--S.top;//先输出S.top再减1
returnOK;
}
StatusStackEmpty(SqStackS)
{
if(S.base==S.top)
return1;
else
return0;
}
//树
StatusCreateBiTree(BiTree&T)//递归创建一棵树
{
charch;
ch=getchar();//needinput'12##3##'
if(ch=='#')T=NULL;
else
{
if(!
(T=(BiTNode*)malloc(sizeof(BiTNode))))
return(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
returnOK;
}//CreateBiTree
StatusPreOrderTraverse(BiTreeT,int&n)
{
if(T)
{
printf("%c",T->data);
n++;
if(PreOrderTraverse(T->lchild,n))
{
if(T->data)
if(PreOrderTraverse(T->rchild,n))
{
returnOK;
}
}
returnERROR;
}else
returnOK;
}//PreOrderTraverse
StatusCountLeaf_Stack(BiTreeT)
{
inti=0,k=0,m=0;
SqStackS;
InitStack(S);
Push(S,T);
while(!
StackEmpty(S))
{
while(GetTop(S,T)&&T)
{
Push(S,T->lchild);
i++;
}
printf("……");
k=Pop(S,T);
if(!
StackEmpty(S))
{
Pop(S,T);
Push(S,T->rchild);
}
}
returni;
}
charFind_k_Node(BiTreeT,intk)//实验二
{
inti=0;
BiTreep;
SqStackS;
InitStack(S);
Push(S,T);
while(!
StackEmpty(S)&&i { while(Get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原理工数据结构实验报告 实验二 太原理工 数据结构 实验 报告