树(3)3遍历二叉树和线索二叉树3-1遍历二叉树二叉树的遍历是指按某种顺序访问二叉树中的所有结点,使得每个结点都被访问,且仅被访问一次
通过一次遍历,使二叉树中结点的非线性序列转变为线性序列
也就是说,使得遍历的结点序列之间有一个一对一的关系
由二叉树的递归定义可知,一棵二叉树由根结点(D)、根结点的左子树(L)和根结点的右子树(R)三部分组成
因此,只要依次遍历这三部分,就可以遍历整个二叉树
若以D、L、R分别表示访问根结点、遍历根结点的左子树、遍历根结点的右子树,则二叉树的遍历方式有六种不同的组合:DLR、LDR、LRD、DRL、RDL和RLD
一般限定先左后右的次序,那么只有三种遍历:DLR(根左右)、LDR(左根右)、LRD(左右根)
1.先序遍历(DLR)若二叉树为空,遍历结束
否则,(1)访问根结点;(2)先序遍历根结点的左子树;(3)先序遍历根结点的右子树
如右图所示的二叉树,按先序遍历所得到的结点序列为:ABDGCEFH2.中序遍历(LDR)若二叉树为空,遍历结束
否则,(1)中序遍历根结点的左子树;(2)访问根结点;(3)中序遍历根结点的右子树
如右图所示的二叉树,按中序遍历所得到的结点序列为:DGBAECHF3.后序遍历(LRD)若二叉树为空,遍历结束
否则,(1)后序遍历根结点的左子树;(2)后序遍历根结点的右子树
(3)访问根结点;如右图所示的二叉树,按后序遍历所得到的结点序列为:GDBEHFCA4.层次遍历按照自上而下(从根结点开始),从左到右(同一层)的顺序逐层访问二叉树上的所有结点,这样的遍历称为按层次遍历
如右图所示的二叉树,按层次遍历所得到的结果序列为:ABCDEFGH【例】有一如图所示的二叉树,求它的先序遍历、中序遍历、后序遍历和层次遍历结果
先序遍历的序列:ABDGEHCFIK中序遍历的序列:DGBHEAFKIC后序遍历的序列:GDHE