树的学习

原创 2015年11月21日 11:09:17

我用的是人民邮电出版社的数据结构。看到本书对树的介绍,感觉晕晕的,他怎么就不按套路出牌了呢?前面几章都是按套路来,这个刚开始就告诉我一万种表示方法,有神马用。 首先是双亲表示法,书中就是带过,个人感觉作用没多大,哪有人用线性表表示树的,连接起来不得麻烦死。这里不想写它的代码,没用。接下来介绍了孩子表示法,从书后面的实验中感觉孩子表示法中的指针表示法是主流的树的表示方法。这里先介绍孩子表示法的指针表示。书中给的代码是这样的:

#define m 3
typedef struct node
{
    int data;
    struct node *child[m];
}node ,*tree;

这里有不明白的,首先是那个node *child[],我记得链表之中有一个node *next这个是用来链接下接下来的链表的。这个感觉跟那个没什么太大的区别,链表的后面只能链接一个,而用node *child [m]之后,他后面就可以链接m个了(child[0]一个,child[1]一个....)。接下来是这个,*tree是什么鬼?看了书中后面的代码,了解到,*tree等价于typedef node *tree ,意思就是struct node可以用node来表示,以可以用* tree来表示。他们两个的区别,举个例子,都来定义stl 。一个是node *stl 另一个是 tree stl差别就是这个。

接下来写一个带有主函数的代码(我也不知道为什么树全都是二叉树,可能是学了图就会了其他的树了吧,学图的时候回来再看):

用的书上的例子:


代码是:

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    char data;
    struct node *child[100];
} node,*tree;

tree creat()//前序输入
{
    tree a=(tree)malloc(sizeof(node));
    scanf("%c",&a->data);
    if(a->data!='#')
        for(int i=0; i<3; i++)
            a->child[i]=creat();
    else
        a=NULL;

    return a;
}

void preorder(tree a)//前序输出
{
    if(a!=NULL)
    {
        printf("%c",a->data);
        for(int i=0; i<3; i++)
            preorder(a->child[i]);
    }
}

void levelorder(tree a)//层次输出
{
    tree list[100];
    int s=0,e=1;
    list[0]=a;
    if(list[0]!=NULL)
    {
        while(s<e)
        {
            printf("%c",list[s]->data);
            for(int i=0; i<3; i++)
            {
                if(list[s]->child[i]!=NULL)
                {
                    list[e]=list[s]->child[i];
                    e++;
                }
            }
            s++;
        }
    }
}

void postorder(tree a)//后序输出
{
    if(a!=NULL)
    {
        for(int i=0; i<3; i++)
            postorder(a->child[i]);
        printf("%c",a->data);
    }
}

int main()
{
    tree a;
    a=creat();
    preorder(a);
    printf("\n");
    postorder(a);
    printf("\n");
    levelorder(a);

    return 0;
}


输入的测试数据是前序的:ab###ce###fh###i####g###d###(注意i后面是4个#不是三个!!!!)



                    
版权声明:本文为博主原创文章,未经博主允许不得转载。

决策树学习

  • 2017年11月26日 16:31
  • 269KB
  • 下载

二叉树(Binary tree)--算法学习之路(一)

二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构。   二叉树的定义:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i...

机器学习-决策树算法代码详解

from imp import reload from math import log import operator def createDataSet(): dataSet = [[1,...
  • manjhOK
  • manjhOK
  • 2017年11月20日 14:57
  • 48

二叉树学习-VC6

  • 2013年04月10日 18:32
  • 156KB
  • 下载

二叉树学习资料

  • 2012年12月14日 20:50
  • 59KB
  • 下载

机器学习实战-python3决策树实例

工具:PythonCharm 书中的代码是python2的,而我用的python3,结合实践过程,这里会标注实践时遇到的问题和针对python3的修改。  实践代码和训练测试数据可以参考这里  htt...

Kaldi决策树状态绑定学习笔记

  • 2017年04月08日 11:51
  • 5.58MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:树的学习
举报原因:
原因补充:

(最多只允许输入30个字)