发布网友 发布时间:2022-04-24 08:21
共4个回答
热心网友 时间:2022-04-16 02:42
/*树的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;
}
热心网友 时间:2022-04-16 04:00
你应该是说二叉树吧,它的遍历分为前序遍历,中序遍历,后序遍历。
我假设树中存储的是字符,我们遍历并输出,给出示例代码:
/*tree的前序遍历*/
int PreTrav(Tree T)
{
if(T==NULL)return 0;
printf("%c",T->Value);
PreTrav(T->Left);
PreTrav(T->Right);
return 0;
}
/*tree的中序遍历*/
int InTrav(Tree T)
{
if(T==NULL)return 0;
InTrav(T->Left);
printf("%c",T->Value);
InTrav(T->Right);
return 0;
}
/*tree的后序遍历*/
int PosTrav(Tree T)
{
if(T==NULL)return 0;
PosTrav(T->Left);
PosTrav(T->Right);
printf("%c",T->Value);
return 0;
}
热心网友 时间:2022-04-16 05:35
玩的开心。。。
热心网友 时间:2022-04-16 07:26
深度优先广度优先?