数据结构中二叉树中序遍历的教学分析袁宇丽, 胡 玲Ξ(内江师范学院计算机与信息科学系, 四川 内江 641112) 摘 要:数据结构的教学应注重方法的应用,在二叉树的中序遍历中使用投影法可以使遍历过程简单化,再由其中的一种遍历递归算法(先序)推导得到另外两种(中序,后序)的遍历递归算法,让学生加深对整个遍历过程的了解与掌握。
关键词:数据结构;二叉树;遍历;算法中图分类号:G 642 文献标识码:A 文章编号:1671-1785(2006)04-0109-031 引言《数据结构》是计算机学科的一门专业技术基础课,也是计算机程序设计的重要理论技术基础课。
目的是在于让学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据结构选择适当的逻辑结构,存储结构及其相应的算法;并初步掌握算法的时间分析和空间分析的技术;培养学生进行复杂程序设计的能力和数据抽象的能力。
但从学生角度而言,在学习该门课程时普遍反映较难,总觉得课程内容抽象,不易理解,好些具体算法不知从何下手。
针对以上情况,任课教师在讲授该门课程时更应注重方法的应用,从多角度,多侧面展现知识点,化抽象为具体,化特殊为一般,不应只局限于教材上的一种解题模式,应结合自己的理解,补充新方法,这样才能更好的拓宽学生的思路,达到化难为易,举一反三的效果。
下面以具体实例说明。
2 二叉树中序遍历的投影法在二叉树的一些应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理。
这就提出了一个遍历二叉树的问题,即如何按某条搜索路径巡访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。
“访问”的含义很广,可以是对结点作各种处理,如输出结点的信息等。
遍历对线性结构来说,是一个容易解决的问题。
而对二叉树则不然,由于二叉树是一种非线性结构,每个结点都可能有两棵子树,因而需要寻找一种规律,以便使二叉树上的结点能排列在一个线性队列上,从而便于访问。
回顾二叉树的定义可知,二叉树是由三个基本单元组成:根结点、左子树、右子树。
因此,若能依次遍历这三部分,便是遍历了整个二叉树。
若限定先左后右的顺序,则分为三种情况:先(根)序遍历,中(根)序遍历,后(根)序遍历。
二叉树的遍历及其应用是数据结构中一个很重要的知识点,要求学生能根据所给二叉树得到相应的三种遍历序列(前序,中序,后序),并能写出这三种遍历算法。
以中序遍历而言,教材[1]结合图给出了中序遍历过程示意图,并具体分析了该遍历的递归执行过程。
但递归调用及返回对学生来说本身就是一个较难掌握的知识,往往出现进入递归后不知怎样层层返回,所图1 二叉树以书上在说明二叉树的中序遍历时借用递归调用与返回的方法向学生展示整个遍历过程对初学者总感觉有一定难度。
我们在这里补充一种教材上没有提到的二叉树中序遍历的直观方法:投影法。
分析中序遍历的实质,是按先中序访问左子树,再访问根结点,最后中序访问右子树的顺序进行的。
直观上想,处于二叉树最左下方的结点应该是第一个要访问的结点,再结合二叉树本身的构造特点,是有严格的左右子树之分的,所以投影法就是根据二叉树的结构特征得来的。
对于一棵二叉树,从根结点所在的层开始,将所有非空左子树完全位于当前根结点的左方,将所有非空右子树完全位于当・901・第21卷第4期N o 14V o l 121 内江师范学院学报JOU RNAL O F N E I J I AN G T EA CH ER S COLL EGE 收稿日期:2005-11-11 作者简介:袁字丽(1979-),女,四川自贡人,内江师范学院助教,硕士。
前根结点的右方,其余各层均按该方法处理。
这样就构造好了一棵符合要求的二叉树,如下图1所示:在上述二叉树的正下方画一条水平直线,将树中各结点依次垂直投影到这条水平直线上,此时该水平直线上得到的结点序列即为该二叉树的中序遍历序列(DBEA FCG ),这与用书上介绍的方法得到的是同样的结果。
该方法就是利用了二叉树中序遍历先左,再根,后右的思想,采用这种方法,学生理解起来比较直观,避免了教材上递归执行过程中的调用返回等问题,让初学者能轻松掌握,在此基础上再过渡到递归的分析与应用,这样给学生一个缓冲的阶段,有利于更深入的学习。
3 遍历算法的分析数据结构要研究的一个重要内容就是用算法来描述解决实际问题的步骤与过程。
对于二叉树的遍历算法,教材[2]给出了其先序遍历的递归算法,该算法如下:PROC P reo rder (bt :b itrep tr );{先序遍历根结点指针为b t 的二叉树}IF b t ≠N I LTH EN [visit (b t ↑.data );{访问根结点} P reo rder (b t ↑.lch ild ); P reo rder (b t ↑.rch ild ); ]END P ;{P reo rder }那么二叉树中序遍历的递归算法又该怎样呢?结合前面的分析,三种遍历的不同在于对根结点访问的顺序上,所以如果将上述算法中访问结点的语句放于不同的位置处,便会得到另外两种遍历的递归算法,分别如下:PROC Ino rder (b t :b itrep tr );{中序遍历根结点指针为b t 的二叉树}IF b t ≠N I L TH EN [Ino rder (b t ↑.lch ild ); visit (b t ↑.data ); Ino rder (b t ↑.rch ild ); ]END P ;{Ino rder }PROC Po sto rder (b t :bo trep tr );{后序遍历根结点指针为b t 的二叉树}IF b t ≠N I LTH EN [Po sto rder (b t ↑.lch ild ); Po sto rder (b t ↑.rch ild ); visit (b t ↑.data ); ]END P ;{Po sto rder }所以,只要弄清楚问题的本质,算法设计也就容易解决了,这里再补充介绍一种中序遍历的非递归算法。
该算法中使用的数据类型定义如下:T YPEN odep tr =↑nodetype ;N odep tr =reco rd L ch ild :nodep tr ; D ata :char ; R ch ild :nodep tr End ;该算法描述如下(类pascal 语言):V ar roo t :nodep trP rocedu re ino rder (p :nodep tr ){p 指向二叉树的根结点};・011・内江师范学院学报 第21卷第4期{用一个栈实现树的中序遍历}Con st stack size =50;V ar p s :array [1..stack size ]of nodep tr ;top :in teger ;BEG I N Top :=0;{栈置空}R epeat W h ile p <>n ildo Begin Top :=top +1; If top >stack size then stackfu l {栈满的判断}; P s [top ]:=p ;①p :=p ↑.lch ild ; End ;If top <>0then Begin P :=p s [top ]; Top :=top -1; ②W rite (p ↑.data ); P :=p ↑.rch ild End ; U n til top =0END ;该算法借用堆栈实现二叉树的中序遍历,没有涉及到递归的应用,整个过程由循环语句控制,结构清晰,若是能再结合具体图示给学生讲解,理解与掌握该算法思想并不困难。
如果在刚才的中序遍历非递归算法中将②所在的语句放置①,就得到了其先序遍历的非递归算法,也就是说,从二叉树的第一层开始,在访问左右子树前,先访问当前根结点,其余各层依次类推。
以上例子说明,数据结构中的一些知识点之间彼此都有联系,如果能发觉其间的规律,着重分析相互之间的内在联系,并结合教材,补充一些较易理解的解题算法,这样由浅入深的进行介绍,必会加深学生对这些知识的理解与掌握,也会加强对知识灵活应用的能力。
这也是我们开设这门课程的目的所在。
参考文献:[1]严蔚敏,吴伟民.数据结构(第二版)[M ].北京:清华大学出版社,1992.1252128.[2]严蔚敏,吴伟民.数据结构(C 语言版)[M ].北京:清华大学出版社,1998.The Teach i ng Analysis of I norder Traversi ng B i nary Treei n the Data StructureY UAN Yu 2li ,HU L ing(D ep t .of Compu ter &Info rm ati on Science ,N eijiang teachers co llege ,N eijiang ,Sichuan 641112,Ch ina ) Abstract :T he teach ing of the D ata Structu re shou ld m ake a po in t of the app licati on of the m ethod ,u sing the cast shadow m ethod can m ake the p rocess of traverse tu rned in b rief at ino rder traversing B inary tree .A gain from among them of the in side a traverse algo rithm (p reo rder )deduces a trsverse algo rithm that get ano ther tw o k inds of ,let stu 2den t deepen the understanding of w ho le the p rocess of traverse . Key words :data structu re ;b inary tree ;traverse ;algo rithm ・111・2006年8月 袁宇丽,胡 玲:数据结构中二叉树中序遍历的教学分析。