树的几种不同的遍历方式,前序、中序、后序详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ZhangaZhaoLong/article/details/102526272

**

树的遍历:

**
在理解前序、中序、后序遍历时可以看下面的图来理解
在这里插入图片描述

  • 树的遍历就是我们想访问这棵树中所有节点,但是有一个问题,就是如何访问,因为它的结构看起来像是一棵树,所以肯定不能像线性一样从一到最后这样简单的访问,虽然它是以线性存储的,但是也是按照我们遍历它的顺序存储的,所以遍历的方法是一个问题,这个遍历的方法必需是每个节点都要访问一遍,而且不能重复访问,针对二叉树的结构有三个关键点,根,左子树和右子树,所以根据这三个关键点,我们列出了三种访问形式,为前序遍历,中序遍历和后序遍历,当然还有一种层序遍历(和前面三种区别比较大)

前序遍历:
在这里插入图片描述

  • 前序遍历是指先访问根,然后访问左子树,最后访问右子树,具体它的访问过程是,从最上面开始访问,先访问第一个根,访问完之后访问它的左子树,必须把左子树访问完才能访问右子树,当访问左子树时(当然它的左子树是要存在的,如果不存在直接相当于访问完了左子树),先访问它的根,因为是前序,如果它也有左右子树,那就和刚才的操作一样,它的左子树访问完了才能访问右子树,也就是说到这一步时,要先把这棵树子树的所有节点访问完,才能访问这棵树的右子树,而如果这个子树也有它的子树那就必需把这棵子树的左右子树都访问完,才能访问这棵子树的右子树,直到最后一棵左子树空时,才算是访问完了最后一棵左子树,然后就可以访问这个空的左子树的根的右子树,在访问右子树时又是刚才那个顺序,根,左,右,然后右子树全部访问完后才算访问这个根,然后再遍历上一个根的右子树,因为我们先访问的根,再访问的左子树,所以我们每个根都相当于上一个根的左子树,我们把这个根访问完成后,就相当于把上一个根左子树访问完了

  • 为什么一直感觉访问的都是左子树,因为我们把第一个根节点访问完后访问的是它的左子树,然后这个左子树看作是一个树,那么它也有一个根,刚好是第一个根的左孩子,所以每次在访问根的时候,就是相当于访问左孩子,我们是从第一个根往下访问到,最后一个左子树为空时的根,所以在把最后一个根的右子树访问完后,就相当于把上一个根的左子树访问完了,因为左边都访问完了往上回溯时只剩下右边了,也就是除第一个根外,其它的根都是上一个根的左孩子,因为我们的顺序是根,左,右,因为左一直访问不到空,所以一直是往左走的

  • 前序遍历的特点就是可以从第一个元素得到根节点

中序遍历:
在这里插入图片描述

  • 中序遍历是指先访问左子树,然后访问根,最后访问右子树,它和前序遍历在逻辑上差别好像有点大,因为我们前序是从第一个根节点就已经访问了,看起来还是从上到下访问,但中序看起来就是从下到上的顺序,因为它要先访问完左子树而要访问完左子树,就要访问完左子树的左子树,所以直到最后一个为空的左子树被访问之前,都不能遍历,所以看起来是从最后一个开始遍历的,其实还是从第一个开始,只不过它不满足访问的条件,才往下走的

    **

  • 中序遍历的特点是可以从根节点把一棵树分成左右两棵,它的左面是左子树,右面是右子树,根刚好在中间

**

后序遍历:
在这里插入图片描述

  • 后序遍历是指先访问左子树,然后访问右子树,最后访问根,它也是要先访问完左子树,所以也会递规到最后一下为空的左子树才会停下来,然后去右子树,然后如果右子树按后序遍历的顺序先在右子树中找左子树,如果右子树不存在就可以访问根了

    **

  • 后序遍历的特点是可直接从最后一个元素得到根节点

**
**

总结:

**
看完这三种遍历后,感觉每次都是往左递规,因为中序和后序都必需把左子树访问完,而前序遍历是开始访问时,已经访问完第一个根了,所以要访问完左子树,所以也会一直往左走。每次在访问时,都要把每个子树看作一个单独的树然后进行判断先访问哪个,比如前序遍历,访问完第一个根后,要去它的左子树,然后把这个左子树看作一个单独的树,然后把这个树按顺序访问先访问根。

最后就是层序遍历

  • 它很好理解,就是对每一层的对每个节点按从左到右的顺序进行访问,按顺序从第一层访问到最后一层,第一层不用说只有一个根节点,然后第二层从左到右访问,都访问完后,再访问第三层,直到最后一层的最后一个节点被访问完成

  • 在实现它时只需要一个队列,将头节点入队,如果这个节点要出队,就把它的左孩子和右孩子入队,其它的节点也是这个逻辑,利用队列先入先出的结构很容易实现

猜你喜欢

转载自blog.csdn.net/ZhangaZhaoLong/article/details/102526272
今日推荐