/*树的3种最重要的遍历方式分别称为前序遍历、中序遍历和后序遍历。
以这3种方式遍历一棵树时,若按访问结点的先后次序将结点排列起来,就可分别得到树中所有结点的前序列表,中序列表和后序列表。*/
/*设T它以n为树根,树根的子树从左到右依次为T1,T2,..,Tk,那么有:
对T进行前序遍历是先访问树根n,然后依次前序遍历T1,T2,..,Tk。
对T进行中序遍历是先中序遍历T1,然后访问树根n,接着依次对T2,T3,..,Tk进行中序遍历。
对T进行后序遍历是先依次对T1,T2,..,Tk进行后序遍历,最后访问树根n。*/
/*二叉树的定义*/
struct BiTNode{
ElemType data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTree;
/*以下均为递归算法*/
/*前序遍历算法(PreOrderTraverse)*/
Status PreOrderTraverse(BiTree T,int(* visit)(unsignedint a))
{
if(T){
visit(T->data);
PreOrderTraverse(T->lchild,visit);
PreOrderTraverse(T->rchild,visit);
}
return OK;
}
/*中序遍历算法(InOrderTraverse)*/
Status InOrderTraverse(BiTree T,int (* visit)(unsignedint a))
{
if(T){
InOrderTraverse(T->lchild,visit);
(* visit)(T->data);
InOrderTraverse(T->rchild,visit);
}
return OK;
}
/*后序遍历算法(PostOrderTraverse)*/
Status PostOrderTraverse(BiTree T,int(* visit)(unsignedint a))
{
if(T){
PostOrderTraverse(T->lchild,visit);
PostOrderTraverse(T->rchild,visit);
(* visit)(T->data);
}
return OK;
}
温馨提示:答案为网友推荐,仅供参考