计算机数据结构中树的遍历

如题所述

/*树的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;  
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-15
你应该是说二叉树吧,它的遍历分为前序遍历,中序遍历,后序遍历。
我假设树中存储的是字符,我们遍历并输出,给出示例代码:
/*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;
}本回答被网友采纳
第2个回答  2013-11-21

玩的开心。。。

第3个回答  2013-11-15
深度优先广度优先?
第4个回答  2021-01-05

相似回答