• POJ 2418 Hardwood Species【二叉查找树】


    POJ 2418 Hardwood Species
    算法核心 二叉查找树
    题目大意:通过卫星得到了某一个区域的树名,将这些树名按字典顺序输出,
    并输出在树的总数中所占的比例,保留小数点后四位。

    主要思想:对每种树做统计,并计算出所占的比例并不难。
    难的是如何在规定时间内按字典顺序输出输入中涉及的树名。
    字典顺序可以启发我们用排序的方法解决,我们可以把树名
    作为关键字来比较大小,而strcmp函数也给了我们比较大小提
    供了条件。接下来就是要解决时间问题。如果用插入排序的算法
    由于大量的数据需要大量的比较,就会超时。所以这里借助了比较
    经典的数据结构,二叉查找树。那么我们就可以先对输入建树,然
    后再通过树的中序遍历来输出结果。而比例的计算可以在树的节点
    中增加一个空间,
    用于存储关键字出现的次数。

    代码
    #include<stdio.h>
    #include
    <string.h>
    constint NameLen =40;
    long total ;//树的总数
    struct treeNode
    {
    char name[NameLen];
    int count;//该树出现次数
    treeNode *left,*right;
    };

    void insert(treeNode *root,char*name)//将名字插入对应的位置
    {
    treeNode
    *iNode = root;
    bool find =false;
    while(!find)
    {
    int cmp = strcmp(name,iNode->name);
    if(cmp ==0)//名字相同
    {
    (iNode
    ->count)++;
    return;
    }

    if(cmp<0)//在左子树
    {
    if(iNode->left==NULL)
    {
    treeNode
    *h;
    h
    =new treeNode;
    h
    ->count=1;
    strcpy(h
    ->name,name);
    h
    ->left = NULL;
    h
    ->right = NULL;
    iNode
    ->left = h;
    return;
    }
    iNode
    = iNode->left;
    }

    else
    if(cmp>0)
    {
    if(iNode->right == NULL)
    {
    treeNode
    *h;
    h
    =new treeNode;
    h
    ->count=1;
    strcpy(h
    ->name,name);
    h
    ->left = NULL;
    h
    ->right = NULL;
    iNode
    ->right = h;
    return;
    }
    iNode
    = iNode->right;
    }
    }
    }

    void output(treeNode *root)
    {
    if(root->left!=NULL)
    output(root
    ->left);
    printf(
    "%s %.4lf\n",root->name,root->count*100.0/total);
    if(root->right!=NULL)
    output(root
    ->right);
    }

    int main()
    {
    char name[NameLen];
    gets(name);
    treeNode
    *root;
    root
    =new treeNode;
    root
    ->left = NULL;
    root
    ->right = NULL;
    root
    ->count =1;
    strcpy(root
    ->name,name);
    total
    =1;
    while(gets(name)!=NULL)
    {
    insert(root,name);
    total
    ++;
    }


    output(root);

    return0;
    }
  • 相关阅读:
    当梦想渐行渐远的时候
    android开发系列之aidl
    看到这页代码,我要疯了
    android开发系列之性能优化
    近期的一个项目反思与总结
    IOS中摇一摇实现截屏(可实现问题反馈的功能)
    IOS设计模式浅析之外观模式(Facade)
    IOS项目开发中的文件和文件夹操作
    XCode 4.6下XIB文件提示“...could not be opened..."的问题
    "Xcode"意外退出
  • 原文地址:https://www.cnblogs.com/AndreMouche/p/1947501.html
Copyright © 2020-2023  润新知