首先声明一下,本章节只将理论,后期有空会补充相应代码。
我们知道树的遍历有先序遍历,中序遍历,后序遍历。但是给了我们一棵树,如何根据指定的比遍历方式,得出最终的结果呢,这就是答主接下来要说内容。
ps:时间原因,直接在纸上画了…
首先给出原图:
1.先序遍历
这个比较简单,大家一般都能写对。我们知道先序遍历的特点是根左右
则我们:
1、先从结点A出发,判断A是否是根,是,则记录A。
2.下面我们要进行“左”,我们走到了B,这个时候,我们要B看成一颗树,首先我们判断B是否是根结点,是,则记录B
3.接下来我们继续进行左操作,这个时候我们发现树B左孩子为空,那么我们需要进行右操作。
4.这个时候我们来到C,则我们以C为根,把C以及其子孩子看成一棵树,让后继续遍历
……
……
……
依次这样遍历下去,我们得出最后结果为 ABCDEFGH
2. 中序遍历
前言:首先要知道中序遍历的顺序是 左 根 右
步骤:
1.我们首先从A出发,看看A是否右左孩子,这时候我们发现有左孩子B,则我们来到了左孩子这里。
2.以B出发,将B以及其子孩子看成一棵树,这个时候我们判断B是否有左孩子,发现B 没有左孩子,那么按照中序遍历的规则——左根右,可以知道,没有左孩子了,那我们直接输出根节点B
3.现在我们来到了C,这个时候我们以C为根节点看成一颗树,这个时候,我们发现C有左孩子,那么我们去遍历它的左孩子。
4.现在我们来到了D,发现D没有左孩子,也就是左边已经遍历了,但是没有发现结点,则我们输出根节点D
5.这个时候以C为根结点的树的左孩子已经遍历完,我们可以输出根节点C,接着是它的右孩子E
6.那么,这时以A为根节点的树的左孩子我们已经遍历完,我们可以输出根节点A了
……
……
……
这样遍历下去。我们得到的结果为:BDCEAFHG
3.后序遍历
**前言:我们知道后序遍历的顺序是 左 右 根 **
1.我们首先从A出发,判断一下它是否有左孩子,发现有左孩子B,则来到B
2.以B为出发点看作一棵树,则我们发现B不含有左子树,按照后序遍历规则,我们看到B含有右子
树,则我们来到右子树C
3.我们以C为出发点,看成一颗树,判断C是否有左孩子,发现有,则我们来到了D
4.我们以D为出发点,看成一棵树,判断D是否有左孩子,发现D没有左孩子,再判断D是否有右孩子,发现也没有右孩子,那么我们按照 左右根 的顺序 ,可以输出根结点D
5.现在我们我们回到根节点C,发现C也含有右孩子,那么我们来到它的右孩子E
6.我们来到了E,发现E没有左右孩子,那么我们可以输出根节点E
7.这个时候以C为根节点的树的左右孩子已经遍历完,我们可以输出根节点C
8.以B为根节点树的左右孩子也已经遍历完,可以输出根节点B
9.以A根结点的树的左孩子已经遍历完,我们按照后序遍历顺序,来到以A为根结点的右孩子F以及按照以上规则遍历。
……
……
……
10.最后,我们得出结果为 DECBHGFA
就讲到这里了,如果有错误或者需要改进的地方,请大家及时指出。