- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
A B C D E F G ^ ^ ^ ^ ^ ^ ^ ^ ^ 三叉链表图示 B A C D E F G 三叉链表 lchild data 结点结构 parent rchild 6.4 二叉树的遍历和线索 6.4.1 二叉树的遍历 定义:所谓遍历二叉树,就是遵从某种次序,访问二叉树中的所有结点,使得每个结点仅被访问一次。 这里所提的“访问”的含义很广,可以是查询、修改、输出某元素的值,以及对元素作某种运算等等。但要求这种访问不破坏它原来的数据结构。遍历一个线性结构很简单,只须从开始结点出发,顺序扫描每个结点即可。但对二叉树这样的非线性结构,每个结点可能有两个后继结点,因此需要寻找一种规律来系统访问树中的各结点。 如何访问二叉树的每个结点且 每个结点仅被访问一次? 由二叉树的定义是递归的,它是由三个基本单元组成,即根结点、左子树和右子树。因此,遍历一棵非空二叉树的问题可以分解为三个子问题:访问根结点、遍历左子树、遍历右子树,只要依次遍历这三部分,就可以遍历整个二叉树。 由于实际问题一般都是要求左子树较右子树先遍历,分别称为先序遍历、中序遍历和后序遍历。 令L,R,D分别代表二叉树的左子树、右子树、根结点,则有DLR、LDR、LRD三种遍历规则。 递归实现方法 若二叉树非空,则: 1. 访问根结点 2. 先序遍历左子树 3. 先序遍历右子树 B A D C D L R A D L R D L R B D C D L R 得到的序列为:A B D C 先序遍历二叉树 Status PreOrderTraverse( BiTree T ) {//采用二叉链表存贮二叉树 if (T) { //若二叉树不为空 Visit(T-data); //访问根结点 PreOrderTraverse(T-lchild); //先序遍历T的左子树 PreOrderTraverse(T-rchild); //先序遍历T的右子树} //PreOrderTraverse 先序遍历二叉树算法实现 若二叉树非空,则: 1. 中序遍历左子树 2. 访问根结点 3. 中序遍历右子树 B A D C L D R B L D R L D R A D C L D R 得到的序列为: B D A C 中序遍历二叉树 若二叉树非空,则: 1. 后序遍历左子树 2. 后序遍历右子树 3. 访问根结点 B A D C L R D L R D L R D A D C L R D B 得到的序列为: D B C A 后序遍历二叉树 - * a b c * - b c a 这一路线正是从根结点开始沿左子树深入下去,当深入到最左端,无法再深入下去时,则返回,再逐一进入刚才深入时遇到结点的右子树,再进行如此的深入和返回,直到最后从根结点的右子树返回到根结点为止。先序遍历是在深入时遇到结点就访问,中序遍历是在从左子树返回时遇到结点访问,后序遍历是在从右子树返回时遇到结点访问。 在这一过程中,返回结点的顺序与深入结点的顺序相反,即后深入先返回,正好符合栈结构后进先出的特点。因此,可以用栈来帮助实现这一遍历路线。 b a * - c a b * c - a b * c - 三种遍历过程示意图例 void leaf( BiTree T ) { //采用二叉链表存贮二叉树,n为全局变量,用于累加二叉树的叶子结点个数,本算法在先序遍历二叉树的过程中,统计叶子结点的个数,初始化n=0 if( T ) { if( T-lchild==NULLT-rchild==NULL) n+=1; //若T所指结点为叶子结点则计数 leaf(T-lchild); leaf(T-rchild); } //if } //leaf 例 编写求二叉树的叶子结点个数的算法 输入:二叉树的先序
您可能关注的文档
最近下载
- 学堂在线 海上求生与救生 章节测试答案.docx VIP
- 智能无人船在水下地形测量中的应用.pptx VIP
- 超星尔雅2018《形象管理》章节测试答案满分答案.pdf VIP
- 学堂在线 生活英语读写 期末考试复习题答案.docx VIP
- 某沿海城市低空产业赋能城市管理可行性研究报告-简版v1.0.pdf
- 中国石油大学远程教育,压裂井返排优化设计研究.doc VIP
- 学堂在线 战场侦察监视技术与装备 章节测试答案.docx VIP
- 学堂在线 工程伦理2.0 章节测试答案.docx VIP
- 2024年四川省雅安市中考数学试卷(含答案).doc VIP
- 微电子本科毕业论文题目(热门选题100个)最新.pdf VIP
文档评论(0)