- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析_第01周_算法概述与递归
(1)二叉树的遍历 遍历二叉树就是按某种顺序访问二叉树中的每个结点一次且仅一次的过程。 二叉树的遍历方式分为两大类:一类按根、左子树和右子树三个部分进行访问;另一类按层次访问。这里讨论前者。 按根、左子树和右子树三个部分进行访问,遍历二叉树的方式有3种, 先序序列:ABDGCEFH 中序序列:DGBAECHF 后序序列:GDBEHFCA A B C D G E F H 先序遍历:若二叉树为空,则结束遍历操作;否则,先访问根结点,然后用同样的方法先序遍历左子树,最后用同样的方法先序遍历右子树。 中序遍历:若二叉树为空,则结束遍历操作;否则,先按照同样的方法中序遍历左子树,接着访问根结点,最后用同样的方法中序遍历右子树。 后序遍历:若二叉树为空,则结束遍历操作;否则,先用同样的方法先序遍历左子树,然后用同样的方法先序遍历左子树,最后访问根结点 可以看出:遍历操作实际上是将非线性结构线性化的过程,其结果为线性序列,并根据采用的遍历顺序分别称为先序序列、中序序列或后序序列;遍历操作是一个递归的过程,因此,这三种遍历操作的算法可以用递归函数实现。 先序遍历递归算法 void PreOrder(BiTree T) { if (T) { Visit(T); PreOrder(T-LChild); PreOrder(T-RChild); } } 中序遍历递归算法 void InOrder(BiTree T) { if (T) { InOrder(T-LChild); Visit(T); InOrder(T-RChild); } } 后序遍历递归算法 void PostOrder(BiTree T) { if (T) { PostOrder(T-LChild); PostOrder(T-RChild); Visit(T); } } (2)根据遍历顺序创建二叉树 现在考虑这么一个问题:如何输入一个二叉树的先序序列,构造这棵二叉树? 为了保证唯一地构造出所希望的二叉树,在键入这棵树的先序序列时,需要在所有空二叉树的位置上填补一个特殊的字符,比如,‘#’。在算法中,需要对每个输入的字符进行判断,如果对应的字符是‘#’,则在相应的位置上构造一棵空二叉树;否则,创建一个新结点。整个算法结构以先序遍历递归算法为基础,二叉树中结点之间的指针连接是通过指针参数在递归调用返回时完成。 输入:ABD#G###CE##FH###,构造如下图所示二叉树 A B C D G E F H BiTree Pre_Create_BT() { BiTree BT; char ch=getchar(); if (ch==#) return NULL; //构造空树 else { BT=(BiTree)malloc(sizeof(BiTNode)); BT-data=ch; BT-LChild=Pre_Create_BT( ); //构造左子树 BT-RChild=Pre_Create_BT( ); //构造右子树 return BT; } } (3)计算二叉树叶子结点的数量 如何计算一个二叉树的叶子结点数量。这个操作可以使用三种遍历顺序中的任何一种,只是需要将访问操作变成判断该结点是否为叶子结点.下面这个算法是利用中序遍历实现的。 void Leaf(BiTree BT, int *count) { if (BT) { Leaf(BT-LChild, count); if (BT-LChild==NULLBT-RChild==NULL) (*count)++; Leaf(BT-RChild, count); } } (4)交换二叉树的左右子树 许多操作可以利用三种遍历顺序的任何一种,而有些操作则不然,它只能使用其中的一种或两种遍历顺序。将二叉树中所有结点的左右子树进行交换这个操作就属于这类情况。 A B C D G E F H A B C D G E F H 交换左右子树前 交换左右子树后 void change_left_right(BiTree BT) { BiTree p; if (BT) { change_left_right(BT-LChild);
您可能关注的文档
- 第八節覺察別人的情緒.ppt
- 第八章-搜索引擎技术.ppt
- 第六模块阅读课件(PPT 20页).ppt
- 第六届上海金博会邀请函.doc
- 第六届中控杯机器人竞赛实物组官方培训.ppt
- 第八章青少年社会工作的方法.ppt
- 第六章 谈判技巧与行为准则.ppt
- 第六章施工项目成本管理.ppt
- 第六章基因组文库的构建.ppt
- 第六章枯期长江引水水环境影响分析.ppt
- 中考语文总复习语文知识及应用专题5仿写修辞含句子理解市赛课公开课一等奖省课获奖课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第二课《藏猫猫》精品课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第三课《我向国旗敬个礼》精品课件.pptx
- 高中生物第四章生物的变异本章知识体系构建全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 整数指数幂市公开课一等奖省赛课微课金奖课件.pptx
- 一年级音乐上册第二单元你早全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级数学上册第二章实数27二次根式第四课时习题省公开课一等奖新课获奖课件.pptx
- 九年级物理全册11简单电路习题全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级语文下册第五单元19邹忌讽齐王纳谏省公开课一等奖新课获奖课件.pptx
- 2024年秋季新人教PEP版3年级上册英语全册教学课件 (2).pptx
最近下载
- 18全国生物奥林匹克竞赛试题及答案.pdf VIP
- 导游员的职业素质.ppt VIP
- 高考中立体几何问题的热点题型.pptx
- 大班美术《青花瓷盘》.pptx VIP
- 2025年山东力明科技职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 钢铁冶金概论全套课件.ppt
- 2024年宁夏银川中考物理试题及答案.doc VIP
- 人教(2024)新教材下册(教学计划)- 七年级地理下册(人教版2024).docx
- 辽宁省丹东七中七年级英语下册《Unit 10 Where did you go on vacation》教案 人教新目标版.doc VIP
- 智能建造体系机器人介绍.pptx
文档评论(0)