- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7讲 树和二叉树
对于上图所示的二叉树,非递归的二叉树前序遍历算法的执行过程 如下页图所示: 中根序遍历的非递归算法 A B C D E F G p i P-A (1) A B C D E F G p i P-A P-B (2) A B C D E F G p i P-A P-B P-C (3) p=NULL A B C D E F G i P-A P-B 访问:C (4) p A B C D E F G i P-A 访问:C B (5) A B C D E F G i P-A P-D 访问:C B p (6) A B C D E F G i P-A P-D P-E 访问:C B p (7) A B C D E F G i P-A P-D 访问:C B E p (8) A B C D E F G i P-A P-D P-G 访问:C B E P=NULL (9) A B C D E F G i P-A 访问:C B E G D p (11) A B C D E F G i P-A P-F 访问:C B E G D p (12) A B C D E F G i P-A P-D 访问:C B E G p (10) A B C D E F G i P-A 访问:C B E G D F p=NULL (13) A B C D E F G i 访问:C B E G D F A p (14) A B C D E F G i 访问:C B E G D F A p=NULL (15) 7.4 线索二叉树 把结点中指向前驱结点和后继结点的指针称为线索。在二叉树的结点上加上线索的二叉树称作线索二叉树。对二叉树以某种方法(如前序、中序或后序方法)遍历使其变为线索二叉树的过程称作按该方法对二叉树进行的线索化。 二叉树 中序线索二叉树 前序线索二叉树 后序线索二叉树 7.5 树与二叉树的转换 1 树转换为二叉树 树转换为二叉树的方法是: (1)树中所有相同双亲结点的兄弟结点之间加一条连线。 (2)对树中不是双亲结点第一个孩子的结点,只保留新添加的该结点与左兄弟结点之间的连线,删去该结点与双亲结点之间的连线。 (3)整理所有保留的和添加的连线,使每个结点的第一个孩子结点连线位于左孩子指针位置,使每个结点的右兄弟结点连线位于右孩子指针位置。 树转换为二叉树的过程 2 二叉树还原为树 二叉树还原为树的方法是: (1)若某结点是其双亲结点的左孩子,则把该结点的右孩子、右孩子的右孩子……都与该结点的双亲结点用线连起来。 (2)删除原二叉树中所有双亲结点与右孩子结点的连线。 (3)整理所有保留的和添加的连线,使每个结点的所有孩子结点位于相同层次高度。 二叉树还原为树的过程 4 孩子兄弟表示法 孩子兄弟表示法就是用指针既表示出每个结点的孩子结点,也表示出每个结点的兄弟结点。 7.9 树的遍历及应用 树的用法之一就是许多操作系统中的目录结构 如果要列出目录中所有文件的名字,输出格式是:层次为di的文件将在di次跳格(tab)缩进后打印其名 private void listAll(int depth) { printName(depth); //Print the name of the object; if(isDeirectory()) for each file c in this directory (for each child) c.listAll(depth+1);} public void listAll() {listAll(0);} 1 先根遍历 树的先根遍历递归算法为: (1)访问根结点; (2)按照从左到右的次序先根遍历根结点的每一棵子树。 在每个结点上的工作量是常数。如果有N个文件名需要输出,则运行时间就是O(N) 2 后根遍历 树的后根遍历递归算法为: (1)按照从左到右的次序后根遍历根结点的每一棵子树; (2)访问根结点。 例如:计算文件系统某目录下所有文件占用的磁盘区块的总数(由于目录也是文件,也有大小) public int size() { int totalSize=sizeOfThisFile(); if(isDirectory()) for each file c in this directory(for each child) totalSize+=c.size(); return totalSize(); } 先根遍历得到的结点序列为:A B E J F C G K L D H I 后根遍历得到的结点序列为:J E F B K
您可能关注的文档
- 第6节 几何体的投影.ppt
- 第6讲 存储程序控制原理I.ppt
- 第6讲 塑料及其成形.ppt
- 第6讲 科学活动的社会形式.ppt
- 第6讲词汇获取.ppt
- 第6讲 网络接入和互连设备.ppt
- 第6课 《近代前夜的发展与迟滞》课件.ppt
- 第6课 分支结构程序设计.ppt
- 第6节 汽化与液化(第3课时) b.ppt
- 第6节几种重要的盐(第2课时).ppt
- 《基于大数据的环境应急管理决策支持系统在城市环境风险防控中的应用》教学研究课题报告.docx
- 2025至2030中国汽车后市场燃油添加剂行业项目调研及市场前景预测评估报告.docx
- 7 《秸秆综合利用技术创新与推广的经济效益评估:基于XX项目的实证分析》教学研究课题报告.docx
- 高中校园雕塑艺术教育对学生创新思维培养的研究教学研究课题报告.docx
- 《机械制造企业智能化转型中的智能制造技术与设备选型研究》教学研究课题报告.docx
- 小学人工智能教育创新人才培养模式与实践平台构建与实施效果教学研究课题报告.docx
- 9 《老旧小区加装电梯对既有建筑结构影响评估及加固技术研究》教学研究课题报告.docx
- 《电子制造业自动化生产线在提高生产灵活性的策略研究》教学研究课题报告.docx
- 高中历史教学中学生历史思维能力与批判性思维培养的实践研究教学研究课题报告.docx
- 运动会开幕式创意设计对学生审美观念的影响研究教学研究课题报告.docx
文档评论(0)