7-24 树种统计(25 分)(二叉排序的应用)

随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。

输入格式:

输入首先给出正整数N(≤10?5??),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(大小写不区分)。

输出格式:

按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位。

输入样例:

29
Red Alder
Ash
Aspen
Basswood
Ash
Beech
Yellow Birch
Ash
Cherry
Cottonwood
Ash
Cypress
Red Elm
Gum
Hackberry
White Oak
Hickory
Pecan
Hard Maple
White Oak
Soft Maple
Red Oak
Red Oak
White Oak
Poplan
Sassafras
Sycamore
Black Walnut
Willow

输出样例:

Ash 13.7931%
Aspen 3.4483%
Basswood 3.4483%
Beech 3.4483%
Black Walnut 3.4483%
Cherry 3.4483%
Cottonwood 3.4483%
Cypress 3.4483%
Gum 3.4483%
Hackberry 3.4483%
Hard Maple 3.4483%
Hickory 3.4483%
Pecan 3.4483%
Poplan 3.4483%
Red Alder 3.4483%
Red Elm 3.4483%
Red Oak 6.8966%
Sassafras 3.4483%
Soft Maple 3.4483%
Sycamore 3.4483%
White Oak 10.3448%
Willow 3.4483%
Yellow Birch 3.4483%

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4
 5 typedef struct TNode *Position;
 6 typedef Position BinTree;
 7 struct TNode
 8 {
 9     char data[35];
10     BinTree left;
11     BinTree right;
12     int count;
13 };
14 BinTree Insert( BinTree BT , char name[]);
15 void Print( BinTree BT , int n);
16 int main()
17 {
18     int n;
19     int i;
20     BinTree BT = NULL;
21
22     scanf("%d",&n);
23     getchar();
24     for( i=0; i<n; i++){
25         char name[35];
26         gets(name);
27         BT = Insert( BT,name);
28     }
29     Print( BT ,n);
30
31     return 0;
32 }
33
34
35 BinTree Insert( BinTree BT , char name[])
36 {
37     if( !BT ){
38         BT = ( BinTree )malloc(sizeof(struct TNode));
39         strcpy(BT->data,name);
40         BT->count=1;
41         BT->left = BT->right =NULL;
42     }
43     else{
44         int a = strcmp( BT->data,name);
45         if( a<0 )  BT->right = Insert( BT->right,name);
46
47         else if( a>0 ) BT->left=Insert( BT->left,name);
48         else BT->count++;
49     }
50     return BT;
51 }
52
53 void Print( BinTree BT , int n)
54 {
55     if( !BT ) return;
56     else{
57         Print( BT->left,n);
58         printf("%s ",BT->data);
59         printf("%.4f%%\n",(double)BT->count/n*100.0);
60         Print( BT->right,n);
61     }
62 }

原文地址:https://www.cnblogs.com/yuxiaoba/p/8408619.html

时间: 2024-10-21 17:18:18

7-24 树种统计(25 分)(二叉排序的应用)的相关文章

5-24 树种统计 (25分)

5-24 树种统计   (25分) 随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类.请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比. 输入格式: 输入首先给出正整数N(\le 10^5≤10?5??),随后N行,每行给出卫星观测到的一棵树的种类名称.种类名称由不超过30个英文字母和空格组成(大小写不区分). 输出格式: 按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,保留小数点后4位. 输入样例: 29 Red Alder Ash Aspe

[数据结构与算法]二叉排序(搜索)树实现

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4289804.html 定义 二叉排序树又称二叉查找树或二叉搜索树,它或者是一棵空树,或者是具有如下性质的二叉树:1.若它是左子树非空,则左子树上所有节点的值均小于根节点的值2.若它的右子树非空,则右子树上所有节点的值均大于根节点的值3.左.

二叉排序

二叉排序,附带插入,查找和删除值.. /* Author: buer Date: 2017/9/18 11:56:02 */ #include <stdio.h> #include <stdlib.h> typedef struct Tree { int data; struct Tree *lchild; struct Tree *rchild; }Tree; void createBiTree(Tree *root); void insertData(Tree *root, i

9-7-平衡二叉排序(搜索)树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第9章  查找 - 平衡二叉排序(搜索)树 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Base.c        相关测试数据下载  链接? 数据包    

二叉搜索树(二叉排序搜索树)

二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4117    Accepted Submission(s): 1802 Problem Description 判断两序列是否为同一二叉搜索树序列 Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度

数据结构——二叉排序(查找、搜索)树

2. 二叉排序树 2.1 二叉排序树(又叫二叉搜索.查找树) 性质: 若左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值: 左.右子树也分别为二叉排序树. 数列的顺序不同创建出来的二叉排序树是会不一样的! (65 ,32,87, 46,71,98, 39) 每一层数字的顺序是可以换的,32和87是可以换的.          (32,39,46,65,71,87,89)    如果实际应用中遇到相同的值,那么向左向右插入都可

数据结构之树篇2——二叉排序(查找,搜索)树

二叉排序树 引入 基本性质: 二叉排序树(又叫二叉搜索.查找树) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若右子树不空,则右子树上所有结点的值均大于它的根结点的值: 左.右子树也分别为二叉排序树. 不允许有键值相同结点. 二分查找与二叉排序树 ? 二分查找也称为折半查找,要求原线性表有序,它是一种效率很高的查找方法.如果在需要进行频繁修改的表中采用二分查找,其效率也是非常低下的,因为顺序表的修改操作效率低.如果只考虑频繁的修改,我们可以采用链表.然而,链表的查找效率又非常低.

数据结构之二叉搜索树、AVL自平衡树

前言 最近在帮公司校招~~ 所以来整理一些数据结构方面的知识,这些知识呢,光看一遍理解还是很浅的,看过跟动手做过一遍的同学还是很容易分辨的哟~ 一直觉得数据结构跟算法,就好比金庸小说里的<九阳神功>,学会九阳神功后,有了内功基础,再去学习其他武功,速度就有质的提升 内容大概包含这些,会分多篇文章来整理: 二叉搜索树 平衡二叉树(AVL) 二叉堆 堆排序 四叉树 八叉树 图,深度优先DFS.广度优先BFS 最短路径 二叉树 二叉树,也就是每个节点最多有两个孩子的树.多用于搜索,查找,还有可以用来

数据结构 - 从二叉搜索树说到AVL树(一)之二叉搜索树的操作与详解(Java)

二叉搜索树(Binary Search Tree),简称BST,顾名思义,一颗可以用于搜索的二叉树.BST在数据结构中占有很重要的地位,一些高级树结构都是其的变种,例如AVL树.红黑树等,因此理解BST对于后续树结构的学习有很好的作用.同时利用BST可以进行排序,称为二叉排序,也是很重要的一种思想. 二叉树的性质:任意一个节点的所有左子树元素都比该元素值要小,而所有右子树元素都比该元素值要大. 符合该性质的二叉树就是一颗二叉搜索树,当然前提下是树中不允许有重复元素. 所有的二叉搜索树的中序遍历序