




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、二叉树的遍历,知识与技能,理解遍历算法;掌握遍历规则;体会遍历算法的应用。,过程与方法,通过遍历规则讲解和自主总结遍历思想及算法的教学过程,掌握学习分析总结问题的方法。,实现价值,体会复杂数据结构在计算机中的存储方式及组织结构;学会解决如何合理的用计算机程序处理复杂数据。,教学目标,教学重点 掌握二叉树的遍历方法。 理解二叉树的遍历算法,教学难点 二叉树遍历的应用。,重 点 难 点,教 学 过 程,引导 讲授 分析 总结,问题引入,3 (2+5) /(9-6)=,7,先算哪个呢?,借助二叉树,将算术表达式画成一棵二叉树,它的中序遍历序列为:,3 * 2 + 5 / 9 6,它的后序遍历序列为:
2、,2 5 + 3 * 9 6 /,中缀表达式(人的思维),后缀表达式(电脑的思维),遍历定义 遍历用途 遍历方法,指按某条搜索路线遍访每个结点且不重复(又称周游)。,它是树结构插入、删除、修改、查找和排序运算的前提,是二叉树一切运算的基础和核心。,对每个结点的查看通常都是“先左后右” 。,基础知识-遍历规则,二叉树由根、左子树、右子树构成,定义为D、 L、R,以根结点为参照系,注:“先、中、后”的意思是指访问的结点D是先于子树出现还是后于子树出现。,D、 L、R的组合定义了六种可能的遍历方案: LDR, LRD, DLR, DRL, RDL, RLD 若限定先左后右,则有三种实现方案:,DLR
3、 LDR LRD 先序遍历 中序遍历 后序遍历,基础知识-先序遍历,D L R,先序遍历序列:A B D C,先序遍历(DLR):,特点:任意一个结点均处在其子女结点的前面(根结点在前),有什么特点?,分析思想总结算法,D L R,访问根结点,先序遍历根的左子树,先序遍历根的右子树,递归过程,先序遍历算法 DLR( node *root ) if (root !=NULL) printf(“%d”,root-data); DLR(root-lchild); DLR(root-rchild); return(0); ,基础知识-中序遍历,L D R,中序遍历序列:B D A C,特点:根结点左右
4、分别为左右子树的所有结点.,中序遍历(LDR):,讨论中序遍历 思想及算法?,基础知识-后序遍历,后序遍历(LRD):,讨论后序遍历 思想及算法?,L R D,后序遍历序列: D B C A,三种遍历算法总结,中序遍历算法 LDR(node *root) if(root !=NULL) LDR(root-lchild); printf(“%d”,root-data); LDR(root-rchild); return(0);,后序遍历算法 LRD (node *root) if(root !=NULL) LRD(root-lchild); LRD(root-rchild); printf(“%
5、d”,root-data); return(0);,结点数据类型自定义 typedef struct node int data; struct node *lchild,*rchild; node; node *root;,先序遍历算法 DLR( node *root ) if (root !=NULL) /非空二叉树 printf(“%d”,root-data); /访问D DLR(root-lchild); /递归遍历左子树 DLR(root-rchild); /递归遍历右子树 return(0); ,三种遍历算法分析,1. 从前面的三种遍历算法可以知道:如果将print语句抹去,从递归
6、的角度看,这三种算法是完全相同的,或者说这三种遍历算法的访问路径是相同的,只是访问结点的时机不同。,从虚线的出发点到终点的路径 上,每个结点经过3次。,第1次经过时访问,是先序遍历 第2次经过时访问,是中序遍历 第3次经过时访问,是后序遍历,2. 二叉树遍历的时间效率和空间效率 时间效率:O(n) /每个结点只访问一次 空间效率:O(n) /栈占用的最大辅助空间,精确值:树深为k的递归遍历需要k+1个辅助单元,实践内容-练习讨论,例1:,先序遍历的结果是: 中序遍历的结果是: 后序遍历的结果是:,D B E A C D E B C A,口诀: DLR先序遍历,即先根再左再右,A,B,D,E,C
7、,LDR中序遍历,即先左再根再右,LRD后序遍历,即先左再右再根,实践内容-练习讨论,例2:,先序序列:,中序序列:,后序序列:,A B C D E F G H K,B D C A E H G K F,D C B H K G F E A,知识应用-表达式计算,先序遍历结果 + * * / A B C D E 前缀表示法 中序遍历结果 A / B * C * D + E 中缀表示法 后序遍历结果 A B / C * D * E + 后缀表示法 层次遍历结果 + * E * D / C A B,例3:用二叉树表示算术表达式,特别讨论,若已知先序(或后序)遍历结果和中序遍历结果,能否“恢复”出二叉树
8、?,例:已知一棵二叉树的中序序列和后序序列分别是BDCEAFHG 和 DECBHGFA,请画出这棵二叉树。 分析: 由后序遍历特征,根结点必在后序序列尾部(即A); 由中序遍历特征,根结点必在其中间,而且其左部必全部是左子树的子孙(即BDCE),其右部必全部是右子树的子孙(即FHG); 继而,根据后序中的DECB子树可确定B为A的左孩子,根据HGF子串可确定F为A的右孩子;以此类推。,特别讨论:,利用后序和中序遍历序列构造一棵二叉树,已知中序遍历:B D C E A F H G 已知后序遍历:D E C B H G F A,(B D C E),( F H G),A,(D C E),A,B,B,
9、A,C,C,D C E,如果是先序序列和中序序列呢?,知识拓展利用遍历建立二叉树,用空格字符表示无孩子或指针为空,如何把二叉树存入电脑内?,怎样利用遍历建立一棵二叉树?,例:将下面的二叉树以二叉链表形式存入计算机内。,考虑1:输入结点时怎样表示“无孩子”? 考虑2:以何种遍历方式来输入和建树?,将二叉树按先序遍历次序输入: A B C D E G F (/n),以先序遍历最为合适,让每个结点都能及时被连接到位。,字符串输完后应当再加一特殊的结束符号(如$),因为 无法惟一表示结束。,知识拓展利用遍历建立二叉树,建树算法: Status CreateBiTree( BiTree /CreateB
10、iTree,输入序列: A B C D E G F ,课程总结,二叉树的遍历,定义、用途、方法,中序遍历:左、根、右,先序遍历:根、左、右,后序遍历:左、右、根,利用先序遍历建立二叉树,表达式的计算顺序,如何利用遍历构造一棵二叉树?,课后拓展,上机练习,把二叉树的遍历算法改写成程序进行上机调试。,小组讨论完成,小牛试刀,写出利用先序遍历创建一棵二叉树的完整算法。,个人独立完成,课后作业,1、如右图所示:写出该二叉树的前序遍历、中序遍历和后序遍历的序列。 2、已知某二叉树的前序遍历序列为ABDEFGC,中序序列为DEBGFAC,画出该二叉树。 3、已知某二叉树的后序遍历序列为dabec,中序序列为debac,则它的前序遍历序列为:。,再见,再见,人有了知识,就会具备各种分析能力,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 晚托班课程故事
- 中药饮片处方管理规范
- 冰雪奇缘特色课件
- 2025年幼儿园春季个人工作方案演讲稿
- OGTT的检测及护理
- 2025年小班春季教育教学工作方案
- 酒店礼仪知识培训课件
- 酒店消耗品知识培训课件
- 2025年任职校长教育教学工作方案演讲稿
- 汽车走合期维护与安全
- 详解2021年《关于优化生育政策促进人口长期均衡发展的决定》ppt
- 保护继电器中文手册-re610系列rem610tobcnb
- 游泳池经营方案
- 焊接接头表面质量检查记录
- 空调机房吸音墙顶面综合施工专题方案
- 红楼梦专题元妃省亲39课件
- ISO测量管理体系内审员培训资料
- 预防性健康检管理制度管理办法
- ISO50001-2018能源管理体系内审计划、记录及报告
- 初中人教版七年级上册音乐5.2甘美兰(22张)ppt课件
- 工程土石方挖运机械租赁合同
评论
0/150
提交评论