根据二叉树的构成,我们可以进行如下遍历(L:遍历左子树,D:访问根节点,R:遍历右子树)
DLR【先序遍历,先遍历根节点】
LDR【中序遍历,中间遍历根节点】
LRD【后序遍历,最后遍历根节点】
DRL(X)
RDL(X)
RLD(X)
按照我们人们的习惯都是从左向右,所以后三种遍历方法被我们摒弃掉了
先序遍历【先根序遍历】
若二叉树非空
1)先访问根节点。
2)先序遍历左子树
3)先序遍历右子树
若二叉树空
遍历结束
先序遍历的结果:
ABDEGCF
中序遍历【中根序遍历】
若二叉树非空
1)中序遍历左子树
2)访问根节点
3)中序遍历右子树
中序遍历的结果
DBGEACF
后序遍历【后根序遍历】
1)后序遍历左子树
2)后序遍历右子树
3)访问根节点
后序遍历的结果
DGEBFCA
#define 0 NULL
typedef struct BTreeNode{
char date;
struct BTreeNode *lchild, *rchile;
}BTNode, *BTree;
//先序遍历
void preoreder(BTree BT){
if (BT != NULL){
visit(BT);
preorder(BT->lchild);
preorder(BT->rchile);
}
}
//中序遍历
void inorder(BTree BT){
if (BT != NULL){
inorder(BT->lchild);
vister(BT);
inorder(BT->rchile);
}
}
//后序遍历
void postorder(BTree BT){
if (BT != 0){
postorder(BT->lchild);
postorder(BT->rchile);
vister(BT);
}
}
[思考小题:什么样的二叉树它的先序遍历和中序遍历的结点访问次序是相同的呢?】