C语言-数据结构-树

来源:互联网 发布:开淘宝零食店流程 编辑:程序博客网 时间:2024/06/04 18:05
#include <stdio.h>
#include <stdlib.h>
/*
树的遍历
1.树的前序遍历
先访问跟结点,在从左到右
2.树的后序遍历
先从左到右,在访问跟结点
3.层次遍历
左到右*/


///前序
void preoder(tree p)
{
    int i;
    if(p!=NULL)
    {
        printf("%c",p->data);
        for(i=0;i<m;++i)
        {
            preorder(p->child[i]);
        }
    }
}
///后序
void postorder(tree p)   ///p为指向树根节点的指针
{
    int i;
    if(p!=NULL)    ///树不为空
    {
        for(i=0;i<m;++i)          ///依次递归实现各字数的后序遍历
        {
            postorder(p->child[i]);
            printf("%c",p->data);   ///输出跟节点的值
        }
    }
}
///按前序遍历顺序建立一颗3度树
void createtree(tree *p)
{
    int i;
    char ch;
    if((ch==getchar())==' ')
        *p=NULL;    ///建立一颗空树
    else
    {
        *p=(tree)malloc(sizeof(node));  ///产生树的根节点
        (*p)->data=ch;
        for(i=0;i<m;++i)  ///按前序遍历顺序依次递归产生树的每一颗子树
          createtree(&(*p)->child[i]);
    }
}
///树的层次遍历算法
void levelorder(tree t)
{
    tree queue[20];  ///存放等待访问的结点队列
    int f=0,r=1,i;  ///f,r分别为对头,对尾指针
    tree p;
    queue[0]=t;
    while(f<r)     ///队列不为空
    {
        p=queue[f];
        f++;
        printf("%c",p->data);  ///访问队头元素
        for(i=0;i<m;i++)     ///将刚被访问的元素的所有子女结点依次进队
        {
            if(p->child[i])
            {
                queue[r]=p->child[i];
                ++r;
            }
        }
    }
}
int main()
{
    printf("Hello world!\n");
    return 0;
}
原创粉丝点击