数据结构实验6Word文件下载.docx
《数据结构实验6Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验6Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
windows操作系统;
MicrosoftVisualStudio6.0集成开发环境。
三、实验内容与步骤
1.根据P129的方法,将a*b-((c+d*e/f)+g)转化为表达式二叉树(绘图),并写出表达式二叉树的前序、中序和后序遍历顺
先序:
-*ab++c*d/efg
中序:
a*b-c+d*e/f+g
后序:
ab*cdef/*+g+-
2.链式表表示和实现二叉排序树如下:
#include<
stdlib.h>
stdio.h>
typedefintTElemType;
typedefstructBiTNode
{
TElemTypedata;
structBiTNode*lchild,*rchild;
}BiNode,*Bitree;
Bitreeroot;
//定义根结点
voidinsert_data(intx)/*生成/树*/
{
Bitreep,q,s;
s=(Bitree)malloc(sizeof(BiNode));
//创建结点
s->
data=x;
//结点赋值
lchild=NULL;
rchild=NULL;
if(!
root)
{
root=s;
}
else
p=root;
while(p)/*如何接入二叉排序树的适当位置*/
{
q=p;
if(p->
data==x)//相同结点不能重复插入
{
printf("
dataalreadyexist!
\n"
);
return;
}
elseif(x<
p->
data)
p=p->
lchild;
else
rchild;
}
if(x<
q->
q->
lchild=s;
else
rchild=s;
}
voidmain()/*先生成二叉排序树*/
inti=1,x;
//i记录结点个数,x存放结点值
root=NULL;
/*千万别忘了赋初值给root!
*/
printf("
请输入数据,-9999表示输入结束\n"
do
printf("
pleaseinputdata%d:
"
i);
i++;
scanf("
%d"
&
x);
/*从键盘采集数据,以-9999表示输入结束*/
if(x==-9999){
printf("
\nNowoutputdatavalue:
\n"
insert_data(x);
/*调用插入数据元素的函0,0,数*/
}while(x!
=-9999);
改写以上程序,实现功能如下(任选三题):
1.编写函数实现前序、中序和后序遍历。
2.编写函数实现计算叶节点个数。
3.编写函数实现层序遍历。
4.编写函数实现查询二叉树中的某个结点(分查到和查不到两种情况)。
5.编写函数实现求二叉树的深度
6.编写函数实现中序非递归遍历(利用栈)
四、实验结果与数据处理
详细记录程序在调试过程中出现的问题及解决方法。
记录程序执行的结果(贴图)。
五、分析与讨论
对上机实践结果进行分析,上机的心得体会。
六、教师评语
签名:
日期:
成绩
附源程序清单:
1.#include<
DLR(Bitreeroot)
{if(root!
=NULL){//非空二叉树
root->
data);
//访问D
DLR(root->
lchild);
//递归遍历左子树
rchild);
//递归遍历右子树
}
return(0);
LDR(Bitreeroot)
{if(root!
=NULL)
LDR(root->
LRD(Bitreeroot)
=NULL){
LRD(root->
/*调用插入数据元素的函数*/
\nDLR"
DLR(root);
\nLDR"
LDR(root);
\nLRD"
LRD(root);
2.#include<
intCountLeaf(Bitreeroot)
{//返回指针T所指二叉树中所有叶子结点个数
intm,n;
if(!
root)return0;
root->
lchild&
&
!
rchild)return1;
else{
m=CountLeaf(root->
n=CountLeaf(root->
return(m+n);
}//else
}//CountLeaf
intsum;
\n叶节点个数="
sum=CountLeaf(root);
%d\n"
sum);
5.#include<
intDepth(Bitreeroot){//返回二叉树的深度
intdepthval,depthLeft,depthRight;
if(root==NULL)depthval=0;
depthLeft=Depth(root->
lchild);
depthRight=Depth(root->
rchild);
depthval=1+(depthLeft>
depthRight?
depthLeft:
depthRight);
returndepthval;
intd;
\n树的深度为="
d=Depth(root);
d);