计算机数据结构中树的遍历
5个回答
展开全部
/*树的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;
}
展开全部
你应该是说二叉树吧,它的遍历分为前序遍历,中序遍历,后序遍历。
我假设树中存储的是字符,我们遍历并输出,给出示例代码:
/*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;
}
我假设树中存储的是字符,我们遍历并输出,给出示例代码:
/*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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
玩的开心。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询