二叉树的中序遍历从头到底都遵循着一个原则:先左子树-------再根结点----最后右子树(简称:左-----根------右)。一开始,找到根结点的左子树中的最后一个左子树(如图0,图为书上例子)
图0
一、先找A的左子树(红圈部分),如图1
图1
二、由于B也有左子树D,继续往下找B的左子树(红圈部分),如图2
图2
三、由于D没有左子树,则中序遍历就从D开始(如果D有左子树,继续往下找);
然后,D也是G的根结点,而G是D的右子树,根据左-----根------右(此时无左,变成:根------右),
D之后就遍历G;
而图2红圈部分是B的左子树,B是图2红圈部分的根结点,根据左-----根------右(此时无右,变成:左--------根),
所以G之后就遍历B;
由于B没有右子树,而图1红圈部分也是A的左子树,A是图1红圈部分的根结点,根据左-----根------右,
所以B之后就遍历A;
图4
由于图4红圈部分是A的右子树,但是红圈内也有根结点,所以也要继续根据左-----根------右的原则。
由于E是C的左子树,E没有左子树,C是E的根结点,F是C的右子树,
根据左-----根------右,
A之后遍历E,E之后遍历C,C之后遍历F。
最终序列:D G B A E C F
总结:二叉树中序遍历,一开始找遍历的第一个元素范围变化的和输出每个元素的是相反的:
1.一开始找遍历的第一个元素的范围变化是:由大到小,由最大的左子树缩小到最小的左子树
2.输出每个元素的范围变化是:由小到大,由最小的左子树扩大到最大的左子树。
(笔者的话:大概是这个意思吧,总之,二叉树的中序遍历从头到底都遵循着一个原则:
先左子树-------再根结点----最后右子树 简称:左-----根------右 )
到最后,留一题让大家练一下,如图:
答案是:G D H B A E I C F