树的通用遍历算法

来源:互联网 发布:人肉好吃吗 知乎 编辑:程序博客网 时间:2024/04/29 04:35

通用树的遍历算法,适合所有的树

/*树的遍历,通用算法*/#include<stdio.h>typedef struct E_node{    char data;    struct E_node *child[M];//M为树的度}E_NODE;void pre_print(E_NODE *T)//前序遍历M次树{   int i;   if(T!=NULL)   {       printf("%d,",T->data);       for(i=0;i<M;i++)       {           pre_print(T->child[i]);       }   }}void pre_print2(E_NODE *T)//非递归前序遍历{    E_NODE *s[100];//栈元素最多100个,假设不会溢出    int top,i;    if(T==NULL)    {       return;    }    s[0]=T;    top=1;//树的根结点进栈    while(top>0)    {        T=s[--top];//取出栈节点为当前处理结点        printf("%d,",T->data);        for(i=M-1;i>=0;i--)//对于当前队列从右到左各子树        {            if(T->child[i]!=NULL)                s[top++]=T->child[i];//子树根结点进栈        }    }}void level(E_NODE *T)//层次访问{    E_NODE *q[100];    E_NODE *p;    int head;    int rear;    int i;    if(T==NULL)       return ;    q[0]=T;//树根结点入队    head=0;    rear=1;    while(head<rear)//队列非空    {        p=q[head++];//取出队结点为当前处理结点        printf("%d,",T->data);        for(i=0;i<M;i++)//对于当前结点从左到右各子树        {            if(p->child[i]!=NULL)            {                q[rear++]=p->child[i];//子根结点入队            }        }    }}


0 0
原创粉丝点击