【数据结构】:树的先序,中序,后序遍历
在数据结构当中一个很重要的结构则是树了,那么树的先序,中序,后序遍历是怎么进行起来的呢?
一.先序遍历
先序遍历是最简单的,也就是使用深度优先搜索(DFS)算法在树当中进行遍历,我们首先在树的左端走到底,在往下走的时候,没遇到一个节点就打印出来,直到走到底之后再向上返回,如果遇到已经打印,也就是走过的节点则查看这个节点的右端有没有没有打印的节点,如有则打印,没有则不打印。在下方这张图当中数字代表我们打印节点的顺序,1代表第一个就打印了出来,2代表第二个打印出来。
在上面这张图当中,首先树的根节点是“make money fast”,因此这个节点最先被打印出来,然后从左走到底,一次打印“motivation”,greed。这个时候走到底了,我们向上返回,发现前一个节点motivition的右子节点还没有打印,也就是avidity,因此打印出avidity作为第四个节点。第四个节点向下搜索发现没有节点了,因此又向上返回,直到树的根节点。
发现树的根节点下还有两个子节点没有打印,因此先打印这两个子节点左边的节点,也就是method。然后继续往左下走,依次打印出stock fraud, ponzi scheme,bank robbery,最后向上返回打印出最后一个节点References。这是这三个遍历方法当中最简单的一个方法了,接下来我们来看中序遍历。
二.中序遍历
如下图所示:
中序遍历是我们走到底之后发现没有没有东西了才开始打印,而不是像先序一样边走边打印。在一棵子树当中的打印顺序是“左节点——跟节点——右节点”。因此我们也是首先向左下遍历到最底部,发现1下面没有东西了,因此向上返回打印跟节点,也就是2,打印完之后再前往右节点进行搜索,进入右节点发现4还有子节点,因此先打印左边的子节点3,再打印中间的4,最后大印5。接着向上返回到6,这个是整个左子树的根节点,因此将其打印,再遍历右子树即可。
三.后序遍历
如下所示:
后序遍历就是先打印最底部的东西,和先序打印相反。遵循先遍历左树,然后进行“左树——右树——中树”的顺序进行打印。