前言
数据结构分享:二叉树的遍历
一、遍历是什么?
树的遍历是访问树的每个结点,且每个结点仅被访问一次。
二、分类
1.中序遍历
概念:它是先访问左子树,再访问该结点,再对右子树进行访问。
图解(示例):
该二叉树的中序遍历为:DBEACF
解释:从A开始,一直寻找左子树,最后一个为“D”,所以中序遍历第一个为“D”,访问完左子树,下一步是访问该根结点,D的根结点为“B”,所以中序遍历第二个为“B”,然后下一步为访问右子树,B的右子树为“E”,中序遍历第三个为“E”。对于A来说,左子树已经访问完,所以访问根节点A本身,中序遍历第四个为“A”,下一步应该访问A的右子树“C”,则中序遍历第五个为“C”,最后一个则是“F”,为中序遍历第六个“E”。
总结:从定义出发,一步一步来。
2.先序遍历
概念:它是先访问根结点,再访问该结点左子树,再对右子树进行访问。
继续用上例:该二叉树的先序遍历为:ABDECF
解释:许多地方与中序遍历大同小异,这里便简单介绍一下。首先,访问根结点“A”,访问其左子树B,(注意:对于中序遍历而言,一定要访问完所有左子树才停止访问,但是先序遍历是对于一个一个的根结点而言的,所以只要访问该结点的左子树。),对于B,先访问左子树D,再是右子树E,此时,A的左子树已经访问完毕,对其右子树C,然后就是C的右子树F。
3.后序遍历
概念:它是先访问该结点左子树,再对右子树进行访问,再访问根结点。
后序遍历为:DEBFCA
解释:对于后序遍历我们也可以从定义下手,先访问所有左子树,可以来到D,对于D,根结点为B,所以我们下一步是访问B的右子树E,然后就是访问根结点B,前三个为DBE。对于A,左子树已经访问完了,所以应该访问右子树C,但是对于C,C还有一个左子树F,所以先访问F,再访问F的根结点C,最后,A的左右子树都访问完毕,访问A根结点。
三.小总结
对于二叉树的遍历,其实就是一个递归的过程(还有非递归的遍历,但是使用较少),我们可以理解为其实就是对于根结点访问顺序的先后,先序遍历是首先访问根结点,中序遍历是中间,后序是最后。还是需要大家多多练习!融会贯通嘛。
四.练习实例
已知一个二叉树的中序遍历为:DBEACF
,后序为DEBFCA,画出该二叉树并写出先序遍历。
解:1、先从后序遍历下手,后序遍历最后一个就是根结点。则A为第一个根结点。
2、看中序遍历看(由定义,中序是先访问左子树,再访问根结点,再右子树。)所以对于根结点A,"DBE"为其左子树,“CF”为右子树。
3、再看A的前面是C,因为CF是A的右子树,又C在F后面,所以C为F的根结点(后序:先访问子树再根结点),所以C是F的根结点。
4、对于DBE,从后序看,B是最后一个,并且看中序遍历,B位于D、E之间,所以,B为D、E根结点并且D是左子树,E是右子树。一个完整的二叉树就成为了!、
先序遍历请看上文(哈哈哈哈)。