遍历二叉树 傷城~ 2022-06-05 08:11 351阅读 0赞 **遍历二叉树** 今天我们学习了二叉树,现在我就基于二叉树的递归定义来说一说遍历二叉树的三种方法:先序、中序和后序。 根据二叉树的递归定义可知,二叉树是由3个基本单元组成:根结点、左子树和右子树。因此若能依次遍历这三部分,便是遍历了整个二叉树。假如用L、D、R分别表示遍历左子树、访问根结点和遍历右子树,则可有DLR、LDR、LRD、DRL、RDL、RLD这6钟遍历二叉树的方案。若限定先左后右,则只有前3种情况,分别称之为先序遍历、中序遍历和后序遍历。下面我就分别来讲讲这三种遍历的规则吧! 一、先序遍历: 先序遍历的规则为:1.首先访问根结点;2.然后遍历左子树;3.最后遍历右子树。我们可以用一句口诀来帮助我们的记忆:先根再左后右。我知道只是这样口头说的话可能很难理解,我们用一个例子来解释一下吧: ![20171122112502882][] 如上图所示:根据口诀:先根意思是先访问根结点得到第一个是A;再左,再访问左子树,访问到左子树时继续用口诀得到左子树的序列为BDE,然后再访问E的子树H;后右,最后访问右子树,也继续用那个口诀,得到右子树的序列为CFG;把所有遍历的序列结合起来就可以得到此二叉树的先序遍历结果:ABDEHCFG。先序遍历的代码实现如下: void PreOrder(PBTNode pHead) { if (NULL == pHead) { return; } printf("%C ",pHead->num); //先访问根结点 PreOrder(pHead->leftNode); //再遍历左子树 PreOrder(pHead->rightNode); //最后遍历右子树 } 二、中序遍历: 中序遍历的规则为:1.首先遍历左子树;2.然后访问根结点;最后遍历右子树;同样可以用一句口诀可以概括:先左再根后右,我们依然以上图为例:先左,首先遍历左子树,得到序列DBE,因为B的右子树E的下面还有一个子树,但是是右子树,所以A的左子树的序列为DBEH;再根,然后再访问根结点;后右,最后再访问右子树,得到序列FCG;把所有遍历的序列结合起来就得到此二叉树的中序遍历结果:DBEHAFCG。中序遍历的代码实现如下: void InOrder(PBTNode pHead){ if (NULL == pHead) { return; } InOrder(pHead->leftNode);//先遍历左子树 printf("%C ", pHead->num);//再访问根结点 InOrder(pHead->rightNode);//最后遍历右子树 } 三、后序遍历: 后序遍历的规则为:1.首先遍历左子树;2.然后遍历右子树;3.最后访问根结点;依然用一句口诀:先左再右后根。我们还以上图为例用后序遍历的方法来遍历二叉树:先左,首先遍历左子树,得到序列DEB,因为E的子树为右子树,所以A的左子树的序列应该为DHEB;再右,然后再来遍历右子树,得到序列FGC;后根,最后再访问根结点;所以把所有遍历的序列结合起来就得到此二叉树的后序遍历结果:DHEBFGCA。后序遍历的代码实现如下: void PostOrder(PBTNode pHead) { if (NULL == pHead) { return; } PostOrder(pHead->leftNode);//先遍历左子树 PostOrder(pHead->rightNode);//再遍历右子树 printf("%C ", pHead->num);//最后访问根结点 } 这里需要说明一点的是由二叉树的先序序列和中序序列,或由其后序序列和中序序列都能唯一地确定一棵二叉树。下面我依然用一个例题来解释一下: 例: 设一棵二叉树的先序序列为:ABDFCEGH,中序序列为:BFDAGEHC 1.画出这棵二叉树。 2.用后序遍历来遍历这棵二叉树。 这道题的解法为:首先我们可以根据先序序列来确定根结点A,然后根据中序序列来确定A的左子树BFD和右子树GEHC然后用同样的方法可以知道A的左子树和右子树的结构,最后可以得到如下图所示的二叉树: ![Center][] 下面我们再来看看第二小题:用后序遍历来遍历这棵二叉树,同样记住这个口诀:先左再右后根,我们很容易便可以得出这棵二叉树的后序遍历序列为:FDBGHECA。 以上就是我对遍历二叉树的一些理解,如果有什么不对的地方欢迎指正!!! [20171122112502882]: /images/20220605/0c35f3ba3ce4484596adf9aa0d58f897.png [Center]: /images/20220605/d2b2b5843c4d4fa286e5648d51109dd1.png
相关 二叉树 二叉树遍历 通过二叉树遍历求得二叉树 什么是二叉树 > > 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且 偏执的太偏执、/ 2022年12月04日 01:08/ 0 赞/ 302 阅读
相关 遍历二叉树 1. 二叉树的遍历 遍历定义 ——顺着某一条搜索路径巡访二叉树中的结点,使得 每个结点均被访问一次,而且仅被访问一次。 “访问”的含义可以很广,如:输出结点的信息等。 迈不过友情╰/ 2022年08月22日 14:26/ 0 赞/ 438 阅读
相关 遍历二叉树 遍历二叉树 二叉树是由3个基本单元组成的:根结点、左子树和右子树。 若限定先左后右的顺序,则遍历二叉树只有三种情况分别称为先(根)序遍历、中(根)序遍历和后(根)序遍 比眉伴天荒/ 2022年06月08日 00:48/ 0 赞/ 300 阅读
相关 遍历二叉树 遍历二叉树 今天我们学习了二叉树,现在我就基于二叉树的递归定义来说一说遍历二叉树的三种方法:先序、中序和后序。 根据二叉树的递归定义可知,二叉树是由3个基本单元组成:根结点 傷城~/ 2022年06月05日 08:11/ 0 赞/ 352 阅读
相关 二叉树遍历 include<iostream> include<queue> using namespace std; //二叉树结点 ╰+攻爆jí腚メ/ 2022年06月04日 05:35/ 0 赞/ 299 阅读
相关 二叉树遍历 前序遍历(左中右)ABDGHCEIF ![前序遍历][70] 中序遍历(左根右)GDHBAEICF![中序遍历][70 1] 后序遍历(左右根)GHDBIEFCA![ Bertha 。/ 2022年05月11日 13:48/ 0 赞/ 359 阅读
相关 二叉树遍历 二叉树:二叉树是每个节点最多有两个子树的树结构。 本文介绍二叉树的遍历相关知识。 我们学过的基本遍历方法,无非那么几个:前序,中序,后序,还有按层遍历等等。 设L、D、R 痛定思痛。/ 2022年05月10日 06:24/ 0 赞/ 234 阅读
相关 二叉树遍历 二叉树是数据结构中很重要的一个章节,很多同学反应很难,今天我就把我平时的经验给大家讲解一下,今天讲一下二叉树的遍历 工具/原料 ● 数据结构知识 ● 了解树的定义 爱被打了一巴掌/ 2022年05月10日 03:08/ 0 赞/ 316 阅读
相关 遍历二叉树 用递归的方法实现前序遍历,中序遍历,后序遍历: 用递归的方法遍历的时候,其实每个节点都遍历了三遍,根据打印时间的不同,即可实现前序中序及后续,这就是三个遍历代码一样而打印顺序 浅浅的花香味﹌/ 2021年11月01日 15:28/ 0 赞/ 464 阅读
还没有评论,来说两句吧...