三种遍历方式
关于二叉树的三种遍历:前序遍历,中序遍历,后序遍历。记忆时只需以二叉树根节点位置为基准,分别为前,中,后。
前序遍历,表示从 根→左→右
中序遍历,表示从 左→根→右
后序遍历,表示从 左→右→根
解答方法
1. 当给出二叉树,而要求写出遍历顺序时
例如,给出下图,要求写出三种遍历过程
前序遍历:A→B→D→G→H→C→E→I→F
中序遍历:G→D→H→B→A→E→I→C→F
后序遍历:G→H→D→B→I→E→F→C→A
具体描述下中序遍历的思路,其他遍历同理。
思路:在遍历时将整个二叉树拆分成小块的二叉树。但当遍历到的节点还有子节点时,需先继续向下延伸。
如A B C三节点中,
从B开始,但是由于B节点还有子节点,则再以B为根节点。
从D开始,由于D节点还有子节点,再以D为根节点
从G开始,由于G点没有子节点,则直接遍历G点,G结束。
回溯到D,再向右遍历H点。以D为根节点的二叉树遍历结束。
此时顺序为 G→D→H
回溯到B点,G→D→H→B
B点结束,回溯到A点,G→D→H→B→A
A点向右以C为根节点:
从E开始,由于E节点还有子节点,再以E为根节点
E点没有左节点,则遍历顺序为E→I
E点结束,回溯到C,E→I→C
C点再向右到F,E→I→C→F
合并之前的顺序,因此整个遍历顺序为 G→D→H→B→A→E→I→C→F
2. 当给出遍历顺序,而要求画出二叉树时
这时一般都会给出两种遍历顺序:前中或者后中(只有前后可能会有多种二叉树),来要求画出二叉树。因此我们总能判断出根节点,而当判断出一个节点的位置后,只需将其从遍历顺序中删除,将原始顺序进行拆分,仅观察剩余部分即可
如已知
前序遍历:A→B→D→G→H→C→E→I→F
中序遍历:G→D→H→B→A→E→I→C→F
如何画出二叉树呢
思路:根据前序遍历,可知A为根节点。再在中序遍历中,可知 G→D→H→B 在A的左边,E→I→C→F 在A的右边。
将A从原始顺序中“删除”,则:
(将A点左右两边节点直接分开)
前序遍历:B→D→G→H C→E→I→F
中序遍历:G→D→H→B E→I→C→F
接下来只需分别将BDGH以及CEIF的顺序判断好即可。
对于
前序遍历:B→D→G→H
中序遍历:G→D→H→B
从前序遍历可知,B为根节点。再在中序遍历中,可知 G→D→H 在B的左边,B没有右节点。
再将B点删除,看剩余的DGH,则:
前序遍历:D→G→H
中序遍历:G→D→H
因此 D为根节点,G为D的左节点,H为D点右节点。
至此A点左半部分树状图为
右边节点EICF的推理过程同理,不再赘述。