二叉树的遍历共分四种:前序遍历、中序遍历、后序遍历、层序遍历。
除层序遍历以外,所谓的前序、中序、后序,是按父节点所处位置的不同来划分的。父节点在两个子节点的中间,那就是中序,在两个子节点的前面那就是前序。
此外二叉树对子节点的遍历都是先左后右的。(如果说,男左女右的话,那么可以认为这样有点重男轻女,这个思想在国外也是有的(*^__^*) 嘻嘻……)
以上面这个二叉树为例。
前序遍历:
1、按前序遍历写下根节点和他的子节点
A B C
2、先左后右,看B和他的子节点,在第一步的基础上,写下按前序遍历,B和他的子节点的顺序,忽略A和C
A ( B D ) C
3、看B的左节点D,按前序遍历写下D和他子节点的顺序
A B ( D G H ) C
4、此刻A的左子树已经遍历完成,开始看右子树,同样,按父节点在前,先左后右的顺序写下C和他的子节点的序列
A B D G H ( C E F )
5、先左后右,先看C的右节点E,按父节点在前,先左后右的顺序写下E和他的子节点的序列
A B D G H C ( E I ) F
6、此时整个二叉树已经全部遍历完成,没有节点没有访问到,那么完整的序列就是
A B D G H C E I F
中序遍历:
思想和步骤与前序一样,只是父节点变成在中间访问。
1、按父节点在中间,先左后右的顺序遍历根节点和他的子节点
B A C
2、按父节点在中间,先左后右的顺序遍历根节点左节点B和他的子节点
(D B ) A C
3、按父节点在中间,先左后右的顺序遍历B的左节点D和他的子节点
(G D H ) B A C
4、根节点的左子树遍历完成,那就开始遍历右子树,C和他的子节点
G D H B A ( E C F)
5、按父节点在中间,先左后右的顺序遍历C的左节点E和他的子节点
G D H B A ( E I ) C F
6、至此所有节点遍历完成,最终中序遍历顺序为
G D H B A E I C F
后序遍历:
思想和步骤与前面是一样一样的,只是父节点变成在最后访问。
1、按父节点在后面,先左后右的顺序遍历根节点和他的子节点
B C A
2、按父节点在后面,先左后右的顺序遍历根节点左节点B和他的子节点
(D B ) C A
3、按父节点在后面,先左后右的顺序遍历B的左节点D和他的子节点
(G H D ) B C A
4、根节点的左子树遍历完成,那就开始遍历右子树,C和他的子节点
G H D B ( E F C ) A
5、按父节点在后面,先左后右的顺序遍历C的左节点E和他的子节点
G H D B ( I E ) F C A
6、至此所有节点遍历完成,最终后序遍历顺序为
G H D B I E F C A
层序遍历:
最简单的一种遍历方法。按层次,从左到右写,完全不需要考虑前后问题。
1、先遍历第一层
A
2、遍历第二层
A ( B C )
3、遍历第三层
A B C ( D E F )
4、遍历第四层
A B C D E F ( G H I )
5、所有层次遍历完成,最终层序遍历结果为
A B C D E F G H I