数据结构实验报告2Word文件下载.docx

上传人:b****6 文档编号:18985493 上传时间:2023-01-02 格式:DOCX 页数:15 大小:264.47KB
下载 相关 举报
数据结构实验报告2Word文件下载.docx_第1页
第1页 / 共15页
数据结构实验报告2Word文件下载.docx_第2页
第2页 / 共15页
数据结构实验报告2Word文件下载.docx_第3页
第3页 / 共15页
数据结构实验报告2Word文件下载.docx_第4页
第4页 / 共15页
数据结构实验报告2Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构实验报告2Word文件下载.docx

《数据结构实验报告2Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告2Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构实验报告2Word文件下载.docx

stack>

queue>

usingnamespacestd;

typedefintElemType;

typedefstructBiTreeNode

{

ElemTypedata;

structBiTreeNode*lchild,*rchild;

}BiTNode,*BiTree;

printlist(BiTreer)//以广义表的形式输出二叉树

{

inti=1;

if(r!

=NULL)

{

cout<

<

"

("

;

r->

data;

printlist(r->

lchild);

rchild);

)"

}

}

BiTreefind(BiTreep,intpvalue)//寻值

BiTreeq;

if(p==NULL)

return(NULL);

elseif(p->

data==pvalue)

return(p);

else{

q=find(p->

lchild,pvalue);

if(q==NULL)return(find(p->

rchild,pvalue));

elsereturn(q);

BiTreecreat(BiTree&

head)//创建二叉树

intcvalue,i=1,pvalue,type;

BiTrees,p,q;

endl;

请输入想要建立的二叉树的根结点:

"

cin>

>

cvalue;

if(cvalue!

=-1)

{

head=(BiTree)malloc(sizeof(BiTNode));

head->

data=cvalue;

lchild=NULL;

rchild=NULL;

else

do{

cout<

请输入第"

i++<

个你想寻找的双亲结点:

cin>

pvalue;

if(pvalue!

do{

cout<

请输入结点类型0或1(0表示左,1表示右):

cin>

type;

}while(type!

=0&

&

type!

=1);

请输入你想创建的结点:

p=head;

q=find(p,pvalue);

if(q!

s=(BiTree)malloc(sizeof(BiTNode));

s->

if(type==0)q->

lchild=s;

elseq->

rchild=s;

}

else

cout<

没有双亲结点!

i--;

}while(pvalue!

=-1);

return(head);

voidLevelOrder(BiTree&

T)//层序遍历

BiTreep=T;

queue<

BiTree>

q;

q.push(p);

while(!

q.empty())

p=q.front();

p->

data<

q.pop();

if(p->

lchild!

q.push(p->

rchild!

}

voidPreOrder(BiTree&

T)//递归前序遍历

BiTNode*p=T;

if(T!

PreOrder(p->

voidInOrder(BiTree&

T)//递归中序遍历

{//递归中序遍历

{

InOrder(p->

voidPostOrder(BiTree&

T)//递归后序遍历

PostOrder(p->

voidPreOrder2(BiTree&

T)//非递归前序遍历

{

stack<

s;

while(p||!

s.empty())

if(p!

s.push(p);

p=p->

lchild;

p=s.top();

s.pop();

rchild;

voidInOrder2(BiTree&

T)//非递归中序遍历

intmain()

BiTreep;

creat(p);

层序遍历:

LevelOrder(p);

递归前序遍历:

PreOrder(p);

递归中序遍历:

InOrder(p);

递归后序遍历:

PostOrder(p);

非递归前序遍历:

PreOrder2(p);

非递归中序遍历:

InOrder2(p);

用广义表显示的二叉树为:

printlist(p);

return0;

4、重要函数功能说明

1、printlist(BiTreer)以广义表的形式输出二叉树函数

2、BiTreefind(BiTreep,intpvalue)寻值函数

3、BiTreecreat(BiTree&

head)二叉树创建函数

4、voidLevelOrder(BiTree&

T)层序遍历函数

5、voidPreOrder(BiTree&

T)递归前序遍历函数

6、voidInOrder(BiTree&

T)递归中序遍历函数

7、voidPostOrder(BiTree&

T)递归后序遍历函数

8、voidPreOrder2(BiTree&

T)非递归前序遍历函数

9、voidInOrder2(BiTree&

T)非递归中序遍历函数

5、程序运行结果

建立的二叉树如下:

 

六、实验中遇到的问题、解决及体会

1、刚开始,我不知道应该怎样建立二叉树,怎样将双亲与孩子联系起来,才能使程序运行时清晰明朗,不会使双亲与孩子的关系弄错,后来经过思考,我想到建立二叉树输入结点时可以提示要建立哪个双亲的孩子,从键盘输入双亲结点,就不会使其与孩子的关系弄错,同时选择0表示左孩子,1表示右孩子,这样一来如果之前,某个有左右孩子的双亲只建立了左孩子,而忘了建立右孩子,可以在后面进行补充,就使使用更方便了,并且最后输入-1,就表示二叉树建立结束。

比如:

建立如上图所示二叉树,当我把1的左右孩子结点2、3建立后,我只建立了2的右孩子结点5,然后再建立了3的左右孩子结点6、7,忘记了建立2的左孩子结点,但是我可以在最后建立2的左孩子结点4,这就使得程序更加方便灵活。

2、老师要求用非递归算法编写前序遍历函数和中序遍历函数,还要以广义表的形式输出二叉树,起初我是完全没有想法的,于是我只好询问同学,同时还上网搜索相关信息,最终经过长时间的修改和多次调试,终于编写出了正确的程序可以实现老师要求的功能,这让我懂得在完全没有头绪的情况下,我们是可以寻求他人帮助和借助电脑等资源的。

相关功能函数:

程序运行部分截图:

3、当我编写好能实现老师要求的所有功能的程序后,我多次运行程序,意外发现当我输入的结点值不是个位数时,遍历的结果很混乱,很不清楚,我意识到我遍历后的输出是直接一行连续输出所有结点,导致遍历结果不清楚,不知道到底是哪些结点值,于是我在每一次输出一个结点后,让其再输出一个空格,这样的话,遍历后输出的结果就很清晰明朗了。

这让我懂得即使写好了程序,也要多次以不同的方式、形式运行程序,这样才能发现潜在的问题,对程序进行优化。

修改前遍历函数中的输出都为“cout<

”,

修改后遍历函数中的输出都为“cout<

”。

建立的二叉树如下:

修改前部分截图:

修改后部分截图:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1