• poj2418Hardwood Species


    编辑器加载中...

    题目:

           给出一些树名,问每一棵树的所占的比例

    分析:

           就是给树按字典序排序,并输出他们所占的比例,由于本题涉及的树名比较多,可以采用

           二分搜索树来做,然后按照中序遍历即可

    #include <iostream>

    #include <cstdio>

    #include <cstring>

    using namespace std;

    #define X 50

    int cnt;

    struct node     //树的结构体

    {

           int id;                    //储存个数的

           char name[X];       //储存名字

           node *rchild;   //右子树

           node *lchild;   //左子树

    };

    char in[X];

    struct node *insert(node *r,char in[X],int len)//插入树名

    {

           if(r==NULL)          //当当前位置为空时,直接插入到该位置即可

           {

                  r = new node; //申请新的节点

                  strcpy(r->name,in);//把该树名储存到结构体的数组中

                  r->id = 1;              //因为这是一棵新的树,所以暂时它的数目为1

                  r->lchild = NULL;//左右子树置空

                  r->rchild = NULL;

           }

           else

           {

                  if(strcmp(r->name,in)>0)      //比节点的字典序小时,递归插入到左子树中

                         r->lchild = insert(r->lchild,in,len);

                  else if(strcmp(r->name,in)<0)       //比节点的字典序大时,递归插入到右子树中

                         r->rchild = insert(r->rchild,in,len);

                  else  //当相等时,直接数目加一即可

                         r->id++;

           }

           return r;

    }

    void inorder(node *r)     //中序遍历

    {

           if(r!=NULL)

           {

                  inorder(r->lchild);

                  printf("%s %.4lf\n",r->name,r->id*100.0/cnt);//打印树名和百分比

                  inorder(r->rchild);

           }

    }

    int main()

    {

           freopen("sum.in","r",stdin);

           freopen("sum.out","w",stdout);

           cnt = 0;

           node *r;

           r = NULL;

           while(gets(in))

           {

                  cnt++;

                  int len = strlen(in);

                  r = insert(r,in,len);//把新输入的树名插入到结构体中

           }

           inorder(r);      //中序遍历

           return 0;

    }

  • 相关阅读:
    美丽的前端控件
    LeetCode:Rotate List
    VC++ 改动VMware BIOS、uuid_location、ethernet0_address等
    我们错过了那么多机会,怎么办
    怎样在centos安装python-mysql?
    eMMC ext4综述【转】
    闪存中的NorFlash、NandFlash及eMMC三者的区别【转】
    UFS和EMMC的区别--原理学习【转】
    EMMC 介绍【转】
    emmc和ssd的区别【转】
  • 原文地址:https://www.cnblogs.com/yejinru/p/2375329.html
Copyright © 2020-2023  润新知