二叉树的遍历

在软考或者自考中,总有这类的试题

求出下图所示的二叉树的先序遍历、中序遍历和后序遍历的节点序列

                                                    数据结构-二叉树的先序、中序、后序遍历_后序遍历

先序遍历

我来附上一张手绘图(看着有点没技术含量)

                                                                      数据结构-二叉树的先序、中序、后序遍历_Java_02


  这里你就会纳闷,数字1是做什么用的,别急,听我下面慢慢给您解释:

  我们从A作为入口,然后把这个整个的二叉树外围画一遍,从A出发,第一次遇见B,所以我们就在B的左侧上数字1,然后第一次遇到C,所以我们在C的左侧写上数字1,然后遇到第一次遇到E,我们在E的左侧写上数字1,以此类推,把整个的二叉树遍历完全,然后我们就开始找数字1,出来的就是它的先序序列:ABCEDFGKH

思想:若二叉树为空,返回,否则:

1、遍历根节点;2、先序遍历左子树;3、先序遍历右子树,需要注意的是:遍历左右子树的时候仍然采用先序遍历方法。那么遍历的结果就是:根--左--右


中序遍历

依旧手绘图:

                                                                    数据结构-二叉树的先序、中序、后序遍历_中序遍历_03



  这里你就会纳闷,数字1是做什么用的,别急,听我下面慢慢给您解释:

  我们从A作为入口,然后把这个整个的二叉树外围画一遍,从A出发,发现A的左右子树都存在,那么就在A的下方写上一个数字0,然后找B,B的左右子树都存在,在B的下方协商一个数字0,C,发现C只有左子树没有右子树,那么就在C的右边写上一个数字0,然后找E,发现E没有左右子树,就在E的下方写上一个数字0,。以此类推,我们就找到了中序遍历:ECBDAGKFH

思想:

1、中序遍历左子树;2、访问根节点;3、中序遍历右子树。那么中序遍历的结果就是:左--根--右


后序遍历

依旧手绘图

                                                                   数据结构-二叉树的先序、中序、后序遍历_后序遍历_04


  这里你就会纳闷,数字1和2是做什么用的,别急,听我下面慢慢给您解释:

  我们从A作为入口,然后把这个整个的二叉树外围画一遍,从A出发,流入A第一次,写上数字1,继续走流入B第一次,所以写上数字1,然后流入C第一次,依旧写1,流入E第一次,写1,然后流出E流向了C,那么就遇到了E第二次,C第二次,所以写上数字2,然后流入D第一次,流出D,写上数字2,以此类推,后序遍历:ECDBKGHFA

思想:

1、后序遍历左子树;2、后序遍历右子树;3、访问根节点。所以:后序遍历的结果是:左--右--根。