![二叉树的操作_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/6/d33c9177-8397-49d6-afd5-3922914c3779/d33c9177-8397-49d6-afd5-3922914c37791.gif)
![二叉树的操作_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/6/d33c9177-8397-49d6-afd5-3922914c3779/d33c9177-8397-49d6-afd5-3922914c37792.gif)
![二叉树的操作_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/6/d33c9177-8397-49d6-afd5-3922914c3779/d33c9177-8397-49d6-afd5-3922914c37793.gif)
![二叉树的操作_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/6/d33c9177-8397-49d6-afd5-3922914c3779/d33c9177-8397-49d6-afd5-3922914c37794.gif)
![二叉树的操作_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/6/d33c9177-8397-49d6-afd5-3922914c3779/d33c9177-8397-49d6-afd5-3922914c37795.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、二叉树操作实验日志实验题目:二叉树操作实验目的:掌握二叉树的定义、性质及存储方式,各种遍历算法.实验要求:采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作.实验主要步骤:1、分析、理解程序程序的功能是采用二叉树链表存储结构,完成二叉树的建立,先序、中序和 后序以及按层次遍历的操作.如输入二叉树 ABD#CE#F# ,链表示意图如下:2、添加中序和后序遍历算法/=LNR中序遍历=void Inord er(BinTree T)(if(T)Inorder(T->lchild);printf("%c,T->data)
2、;Inorder(T->rchild);)/=LRN后序遍历=void Postorder(BinTree T) (if(T)Postorder(T->lchild);Postorder(T->rchild);printf("%c,T->data);)3、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点空指针,如ABD#CE#F# ,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求所有叶子及结点总数.四、源程序代码#include"stdio.h" #include"string.h"#inclu
3、de"stdlib.h"#define Max 20/结点的最大个数typed ef struct nod echar data;struct node *l chil d,*rchil d;BinTNode;typed ef BinTNode *BinTree; int NodeNum,l eaf;/自定义二叉树的结点类型/定义二叉树的指针/NodeNum为结点数,leaf为叶子数/=基于先序遍历算法创立二叉树要求输入先序序列,其中参加虚结点"#"以示空指针的位置BinTree CreatBinTree(void) BinTree T; char ch
4、;if(ch=getchar()='#') return(NULL);elseT=(BinTNode *)mall T->data=ch;/读入#,返回空指针oc(sizeof(BinTNode);/生成结点/构造左子树/构造右子树T->lchil d=CreatBinTree();T->rchil d=CreatBinTree(); return(T);)/NLR先序遍历void Preorder(BinTree T) (if(T) printf("%c",T->data);/ 访问结点Preorder(T->l chil d
5、);/ 先序遍历左子树Preorder(T->rchil d);/ 先序遍历右子树=LNR中序遍历=void Inorder(BinTree T) if(T)Inorder(T->l chil d);printf("%c",T->data);Inorder(T->rchil d); /=LRN 后序遍历= void Postorder(BinTree T) if(T)Postorder(T->l chil d);Postorder(T->rchil d);printf("%c",T->data); /=采用后序遍
6、历求二叉树的深度、结点数及叶子数的递归算法int TreeDepth(BinTree T) int hl,hr,max;if(T)hl=TreeDepth(T->l chil d);/ 求左深度hr=TreeDepth(T->rchil d);/ 求右深度max=hl>hr? hl:hr;/取左右深度的最大值NodeNum=NodeNum+1;/ 求结点数if(hl=0&&hr=0) l eaf=leaf+1;/ 假设左右深度为0 ,即为叶子.return(max+1);else return(0);/= 利用"先进先生"(FIFO)队列,
7、按层次遍历二叉树=void Level order(BinTree T) /定义结点的指针数组/根入队cqint front=0,rear=1;BinTNode *cqMax,*p;cq1=T;whil e(front!=rear)cqrear=p->rchild;front=(front+1)%NodeNum; p=cqfront;printf("%c,p->data);if(p->l chil d!=NULL) rear=(rear+1)%NodeNum;cqrear=p->l chil d; if(p->rchil d!=NULL) rear=(r
8、ear+1)%NodeNum; /右子树入队/由队/由队,输由结点的值/左子树入队/主函数void main()BinTree root;int i,depth;printf("n");printf("Creat Bin_TreeInput preorder:"); /输入完全二叉树的先序序列,/root=CreatBinTree();do printf("t* selprintf("t1: Preorder Traversal'n");用#代表虚结点,如 ABD#CE#F#/创立二叉树,返回根结点/从菜单中选择遍历
9、方式,输入序号.ect *n"printf("t2: Iorder Traversal'n");printf("t3: Postorder traversal'n");printf("t4: PostTreeDepth,Node number,Leaf number'n");printf("t5: Level Depth'n"); /按层次遍历之前,先选择 4,求生该树的结点数.printf("t0: Exit'n");printf("
10、t*n");scanf("%d",&i);/输入菜单序号0-5 switch (i)case 1: printf("Print Bin_tree Preorder:");Preorder(root);/ 先序遍历break;case 2: printf("Print Bin_Tree Inorder:");Inorder(root);/ 中序遍历break;case 3: printf("Print Bin_Tree Postorder:");Postorder(root);break;case
11、4: depth=TreeDepth(root);printf("BinTree Depth=%d number=%d",d epth,NodeNum);/后序遍历/求树的深度及叶子数BinTree Nodeprintf(" BinTree Leaf number=%d",l break;case 5: printf("LevePrint Bin_Tree:");eaf);Level order(root);break;default: exit(1);printf("n"); whil e(i!=0);实验结果:
12、(1)输入完全二叉树的先序序列/按层次遍历ABD#CE#F# ,程序运行结果如下:iteat Bin_ri*ee; Enput ppeoL'der=ftEjbnBttC£ltKF*ilH * XU H H廿 H y 04 1 a 4-WVMYlf1: Prepeder Trauersal 2* I order Ir«versAl 31 Postarder* traversal1- Pos c I re e De p t h , Mo de numlisr>ljeaf nuiulier S: Level Depth fl: Exit(2)先序序列:itrint
13、Bin_teee PFeorder1 ABDCEF selectX,X 乂 乂 N M1_:Tvauevsal2: larder Irv&rsal3s Postorder traversal4: PostlreeDepthpHode numberLeaf nunber 5: Leuel Depth0: Exit(3)中序序列Bin_Tr>efr I norden: DSRECF与 _® jjt* 17 i_1 z ifedrdfet1 T PAUfti*£Al2: 1 order TfauersaL3 : Postoi'dei' ti*av&a
14、mp;i*sa 14: Pos:tTr&eDeptJi»Node nunberL&aF numberS> Level Depthfl: ExitJtM.MM Jt-Jt X,JtltWXM*(4)后序序列T»int Bin-TFee Po&toirlei' = DHFFCfi1: 1t*匕ord世r ! rauet'sal2: I order rreiversal3: Posttfriier traversal4: PostTr&eDepth,Hade number>Leaf number5 L&vel D
15、epth.:Exit(5)所有叶子及结点总数*WM-WUM H 1*W-V X W 射 W »-> .tJinTree Depth=3 BinTree Node nunber=6 BinTree Leif nunber=3k,- HL M V M PT % k I IT I. Bi Pt M K 9K VI M JI XXX1: Ppeordep iFauersal2: lordev Ivauersal3 - Postot'det' ti*auei*sal4: PostTveeDepth,Node nunher,LeaF ntimber5: Level Depth 0 z Exit(6)按层次遍历序列LeuePi*int Bin_Ti*ee: ftBCDEF w" i h y k w8 匕 hr n 入1 人人 A u ihtxiiII g_ k1 : Pi*eor<l住产 I r-AV&t*sa 12 - I d fde r rraveisal3 : Postorde-r trAversl4 : PotTr&oDepthMQdc: F>unht:r«Leaf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络监控服务协议书(2篇)
- 股票操盘委托协议书范本
- 工业设备维修保养合同范例
- 天津市五区县重点校联考2024-2025学年高一上学期11月期中考试生物试题(解析版)
- 学生宿舍租赁合同简文本
- 湖南省部分学校2023-2024学年高一上学期期末联考生物试题(解析版)
- 社交媒体在商业活动中的公关价值
- 社区活动在促进老年人健康中的作用
- 电机控制系统常见故障类型及影响分析
- 汽车制造业的绿色制造技术应用
- 工业级七水硫酸亚铁
- 追求理解的教学设计课件资料文档
- 腹主动脉瘤(护理业务学习)
- 内科休克急救
- 变电站的电气主接线课件
- 注射用醋酸亮丙瑞林微球
- 部编版语文五年级下册 全册教材分析
- 妇科运用PDCA循环降低腹腔镜术后肠胀气的发生率品管圈成果汇报
- 胎儿性别鉴定报告模板
- 新零售实务PPT完整全套教学课件
- 小学生1-6册必背古诗楷书字帖(可直接打印-已排版)
评论
0/150
提交评论