二叉树的基本操作实验.doc

上传人:美****子 文档编号:58031341 上传时间:2022-11-06 格式:DOC 页数:10 大小:35KB
返回 下载 相关 举报
二叉树的基本操作实验.doc_第1页
第1页 / 共10页
二叉树的基本操作实验.doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《二叉树的基本操作实验.doc》由会员分享,可在线阅读,更多相关《二叉树的基本操作实验.doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验三 二叉树的基本运算一、实验目的1、使学生熟练掌握二叉树的逻辑结构和存储结构。2、熟练掌握二叉树的各种遍历算法。二、实验内容问题描述建立一棵二叉树,试编程实现二叉树的如下基本操作:1. 按先序序列构造一棵二叉链表表示的二叉树T;2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;3. 求二叉树的深度/结点数目/叶结点数目;(选做)4. 将二叉树每个结点的左右子树交换位置。(选做) 基本要求从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),测试数据如输入:ABCDEGF(其中表示空格字符) 则输出结果为 先序:ABCDEGF 中序:CB

2、EGDFA 后序:CGEFDBA层序:ABCDEFG选作内容采用非递归算法实现二叉树遍历。三、实验前的准备工作1、掌握树的逻辑结构。2、掌握二叉树的逻辑结构和存储结构。3、掌握二叉树的各种遍历算法的实现。一 实验分析本次试验是关于二叉树的常见操作,主要是二叉树的建立和遍历。二叉树的遍历有多种方法,本次试验我采用递归法,递归法比较简单。 二 概要设计功能实现1.int CreatBiTree(BiTree &T) 用递归的方法先序建立二叉树, 并用链表储存该二叉树2.int PreTravel(BiTree &T) 前序遍历3. int MidTravel(BiTree &T) 中序遍历4.in

3、t PostTravel(BiTree &T) 后序遍历5.int Depth(BiTree &T) /计算树的深度6.int howmuch(BiTree T,int h) 采用树节点指针数组,用于存放遍历到的元素地址,如果有左孩子,存入地址,j加一 ,否则没操作,通过访问数组输出层次遍历的结果。k计算叶子数,j为总节点。 H=0printf(%d, j)h=1真printf(%d,k)h=2for(i=0;idata)printf(参数错误)真真真假假假假7. int exchang(BiTree &T) 交换左右子树,利用递归,当有左右孩子时才交换三 详细设计#include#inclu

4、detypedef struct BiTNodechar data; struct BiTNode *lchild,*rchild;BiTNode,*BiTree;int CreatBiTree(BiTree &T)/先序法创建二叉树char ch;if(ch=getchar()= )T=NULL;elseT=(BiTNode*)malloc(sizeof(BiTNode);if(!T)exit(1);T-data=ch;CreatBiTree(T-lchild);CreatBiTree(T-rchild);return 0;int PreTravel(BiTree &T)/前序遍历if(T)

5、printf(%c,T-data);PreTravel(T-lchild);PreTravel(T-rchild);return 0;int MidTravel(BiTree &T)/中序遍历if(T)MidTravel(T-lchild);printf(%c,T-data);MidTravel(T-rchild);return 0;int PostTravel(BiTree &T)/后序遍历if(T)PostTravel(T-lchild);PostTravel(T-rchild);printf(%c,T-data);return 0;int howmuch(BiTree T,int h)B

6、iTNode *Q100;/树节点指针数组,用于存放遍历到的元素地址if(T=NULL)printf(空的二叉树n);Q0=T; /存入树根int i,k=0;int j=1; /j为总节点for(i=0;ilchild!=NULL) /如果有左孩子,存入地址,j加一 ,否则没操作Qj=Qi-lchild ;j+;if(Qi-rchild!=NULL) /如果有右孩子,存入地址,j加一 ,否则没操作Qj=Qi-rchild ;j+;if(Qi-lchild=NULL&Qi-rchild=NULL)k+; /计算叶子数if(h=0)printf(%d, j);else if(h=1)printf

7、(%d,k);else if(h=2) for(i=0;idata);else printf(参数错误);return 0;int Depth(BiTree &T) /计算树的深度 int lh , rh ; if( NULL = T ) return 0 ; else lh = Depth( T-lchild ) ; rh = Depth( T-rchild ) ; return ( lh rh ? lh : rh ) + 1 ;int exchang(BiTree &T)/交换左右子树if(T != NULL)if(T-lchild!=NULL&T-rchild!=NULL)/当有左右孩子

8、时才交换char t;t=T-lchild-data;T-lchild-data=T-rchild-data;T-rchild-data=t; /交换数据exchang(T-lchild);/ 递归调用 exchang(T-rchild);return 0; int choose(BiTree T) /功能选int a;scanf(%d,&a);if(a=1)printf(先序遍历:);PreTravel(T);else if(a=2)printf(中序遍历:);MidTravel(T);else if(a=3)printf(后序遍历:);PostTravel(T);else if(a=4)p

9、rintf(层序遍历:);howmuch(T,2);else if(a=5)printf(总节点数:);howmuch(T,0);else if(a=6)printf(总叶子数:);howmuch(T,1);else if(a=7)printf(树的深度:);printf(%d,Depth(T);else if(a=8)printf(交换前n);howmuch(T,2);exchang(T);printf(交换后n);howmuch(T,2);else if(a=9)exit(1);else printf(没有这个操作n); printf( 操作完成,请输入下一个操作n);choose(T);

10、return 0;int main() /主函数printf(-二叉树的基本操作-n);printf(请先建立二叉树,按先序的方式输入如果数据为空输入空格n);BiTree T; /定义二叉树,初始化CreatBiTree(T); choose(T);return 0;四 用户手册根据程序的提示按先序输入二叉树,如果数据为空输入空格,然后回车,输入你要进行的操作的序号。1.先序遍历、2中序遍历、3 后序遍历 、4层次遍历、5总节点数、6总叶子数、7树的深度、8交换左右子树、9结束操作五 实验总结通过实验,我熟悉二叉树树的基本操作,掌握二叉树的实现以及实际应用。加深了对二叉树的理解,逐步培养解决实际问题的编程能力以及进一步了解了二叉树。递归的使用,要注意,初始时的状态以及如何使用递归,注意普遍性,思考时从普通的开始。通过这次上机操作,让我明白书本上的程序一定要自己去调试,这样才能将书本程序与老师讲的内容融会贯通,达到温故而知新。六 运行结果ADBCEFG 图(1)图表 1第 10 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 文案大全

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁