实验3 二叉树的应用.docx

上传人:b****4 文档编号:5453067 上传时间:2023-05-08 格式:DOCX 页数:11 大小:42.70KB
下载 相关 举报
实验3 二叉树的应用.docx_第1页
第1页 / 共11页
实验3 二叉树的应用.docx_第2页
第2页 / 共11页
实验3 二叉树的应用.docx_第3页
第3页 / 共11页
实验3 二叉树的应用.docx_第4页
第4页 / 共11页
实验3 二叉树的应用.docx_第5页
第5页 / 共11页
实验3 二叉树的应用.docx_第6页
第6页 / 共11页
实验3 二叉树的应用.docx_第7页
第7页 / 共11页
实验3 二叉树的应用.docx_第8页
第8页 / 共11页
实验3 二叉树的应用.docx_第9页
第9页 / 共11页
实验3 二叉树的应用.docx_第10页
第10页 / 共11页
实验3 二叉树的应用.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验3 二叉树的应用.docx

《实验3 二叉树的应用.docx》由会员分享,可在线阅读,更多相关《实验3 二叉树的应用.docx(11页珍藏版)》请在冰点文库上搜索。

实验3 二叉树的应用.docx

实验3二叉树的应用

 

实验五:

二叉树的应用

一、实验预备知识

1树是一种非线性的结构,它具有递归特点。

2二叉树有四种遍历方法,分别为:

先根,后根、中根和层次。

掌握四种遍历的规则。

(每个结点都访问,并且只访问一次)

二、实验目的

1掌握二叉树的逻辑结构特性,以及各种存储结构的特点及适用范围。

2掌握用指针类型描述、访问和处理二叉树的各种运算的实现算法。

三、实验内容

1编写采用二叉链表形式存储的二叉树的创建算法。

2编写二叉树的先序、中序、后序遍历的递归算法、先序和中序的非递归算法和按层遍历的算法。

2编写将一棵二叉树的所有左右子树进行交换的算法。

3编写统计二叉树中叶子结点的算法。

4编写一个主函数,将上面函数连在一起,构成一个完整的程序。

5将实验源程序调试并运行。

四、实验要求

建立的二叉树为:

#include

usingnamespacestd;

typedefchardatatype;

typedefstructnode

{

datatypedata;

structnode*lchild,*rchild;

}bintnode;

typedefbintnode*bintree;

typedefstructstack

{

bintreedata[100];

inttag[100];

inttop;

}seqstack;

创建二叉树算法:

voidCreateBinTree(bintree*t)

{

charch;

if((ch=getchar())=='0')

(*t)=NULL;

else

{

*t=newbintnode;

(*t)->data=ch;

CreateBinTree(&(*t)->lchild);

CreateBinTree(&(*t)->rchild);

}

}

前序遍历递归算法:

voidPreorder(bintreet)

{

if(t)

{

cout<data<<"";

Preorder(t->lchild);

Preorder(t->rchild);

}

}

中序遍历递归算法:

voidInorder(bintreet)

{

if(t)

{

Inorder(t->lchild);

cout<data<<"";

Inorder(t->rchild);

}

}

后序遍历递归算法:

voidPostorder(bintreet)

{

if(t)

{

Postorder(t->lchild);

Postorder(t->rchild);

cout<data<<"";

}

}

voidPush(seqstack*s,bintreet)

{

s->data[++s->top]=t;

}

bintreePop(seqstack*s)

{

if(s->top!

=-1)

{

s->top--;

return(s->data[s->top+1]);

}

else

returnNULL;

}

前序遍历非递归算法:

voidPreorder1(bintreet)

{

seqstacks;

=-1;

while((t)||!

=-1))

{

while(t)

{

cout<data<<"";

++;

[]=t;

t=t->lchild;

}

if>-1)

{

t=Pop(&s);

t=t->rchild;

}

}

}

中序遍历非递归算法:

voidInorder1(bintreet)

{

seqstacks;

=-1;

while((t!

=NULL)||!

=-1))

{

while(t)

{

Push(&s,t);

t=t->lchild;

}

if!

=-1)

{

t=Pop(&s);

cout<data<<"";

t->rchild;

}

}

}

层次遍历算法:

voidLevelorder(bintreet)

{

bintreequeue[100];

intfront,rear;

if(t==NULL)

return;

front=-1;

rear=0;

queue[rear]=t;

while(front!

=rear)

{

front++;

cout<data<<"";

if(queue[front]->lchild!

=NULL)

{

rear++;

queue[rear]=queue[front]->lchild;

}

if(queue[front]->rchild!

=NULL)

{

rear++;

queue[rear]=queue[front]->rchild;

}

}

}

遍历叶子节点算法:

voidCountLeaf(bintreet)

{

if(!

t)

return;

if(!

(t->lchild||t->rchild))

cout<data<<"";

CountLeaf(t->lchild);

CountLeaf(t->rchild);

}

交换左右子树算法:

voidSwapBinTree(bintreet)

{

bintrees;

if(t)

{

SwapBinTree(t->lchild);

SwapBinTree(t->rchild);

s=t->lchild;

t->lchild=t->rchild;

t->rchild=s;

}

}

主函数实现:

voidmain()

{

bintreeroot;

cout<<"***********************************************************"<

cout<<"请按前序遍历次序顺序读入所要生成的二叉树:

";

CreateBinTree(&root);

cout<<"***********************************************************"<

cout<<"*******************************************"<

cout<<"递归实现前序遍历结果:

";

Preorder(root);

cout<

cout<<"\n递归实现中序遍历结果:

";

Inorder(root);

cout<

cout<<"\n递归实现后序遍历结果:

";

Postorder(root);

cout<

cout<<"*******************************************"<

cout<<"*******************************************"<

cout<<"非递归实现前序遍历结果:

";

Preorder1(root);

cout<

cout<<"\n非递归实现中序遍历结果:

";

Inorder(root);

cout<

cout<<"\n层次遍历结果:

";

Levelorder(root);

cout<

cout<<"\n叶子结点为:

";

CountLeaf(root);

cout<

cout<<"*******************************************"<

cout<<"*******************************************"<

printf("交换左右子树后遍历如下:

");

cout<

SwapBinTree(root);

cout<<"\n递归实现前序遍历结果:

";

Preorder(root);

cout<

cout<<"\n递归实现中序遍历结果:

";

Inorder(root);

cout<

cout<<"\n递归实现后序遍历结果:

";

Postorder(root);

cout<

cout<<"*******************************************"<

}

5、实验结果:

 

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2