二叉排序树 字典树 树中统计
2016-06-09 21:42
176 查看
树种统计
随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。首先输入正整数N(≤105),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(不区分大小写)。按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,每种树的信息占一行。
#include <cstdio>
#include <sstream>
#include <cstring>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;
#define N 35
int n ;
typedef struct node{
char s
;
int cnt ;
struct node *left , *right ;
node(char _s[] = "" , int _cnt = 0)//
这个是 c++中的构造函数在new一个节点的时候给他里面的成员变量就行赋值。
{
strcpy(s,_s);
cnt = _cnt;
left = NULL ;
right = NULL ;
}
}Bnode ;
void inOrder(Bnode* root)
{
if(root != NULL )
{
inOrder(root->left) ;
printf("%s %.4lf%%\n" ,root->s , root->cnt * 100.0 / n ) ;
inOrder(root->right) ;
}
}
Bnode* createTree(Bnode* root , char s[])
{
if(root == NULL)
root = new node(s,1);
// 创建一个的节点并初始化
else{
int cmp = strcmp(s , root->s);
if(cmp < 0)
{
root->left = createTree(root->left , s) ; // 相当于一个二叉树的遍历吧,
}else if(cmp > 0){
root->right = createTree(root->right , s) ;
}else{
root->cnt = root->cnt + 1 ; // 相同的就直接那个节点就里的一个int 类型的计数器加1.
}
}
return root ;
每次返回一个root节点
}
int main()
{
//freopen("in.txt", "r", stdin);
scanf("%d\n",&n);
int i ;
char s
;
Bnode* root = NULL ;
for(i = 0 ;i < n; i++)
{
gets(s) ;
root = createTree(root , s); // 这个是根节点,每次都是相同的一个。在create函数中一步一步的递归后他他不变,只不过子树变化了。
}
inOrder(root);
return 0 ;
}
运行截图 略
随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。首先输入正整数N(≤105),随后N行,每行给出卫星观测到的一棵树的种类名称。种类名称由不超过30个英文字母和空格组成(不区分大小写)。按字典序递增输出各种树的种类名称及其所占总数的百分比,其间以空格分隔,每种树的信息占一行。
#include <cstdio>
#include <sstream>
#include <cstring>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;
#define N 35
int n ;
typedef struct node{
char s
;
int cnt ;
struct node *left , *right ;
node(char _s[] = "" , int _cnt = 0)//
这个是 c++中的构造函数在new一个节点的时候给他里面的成员变量就行赋值。
{
strcpy(s,_s);
cnt = _cnt;
left = NULL ;
right = NULL ;
}
}Bnode ;
void inOrder(Bnode* root)
{
if(root != NULL )
{
inOrder(root->left) ;
printf("%s %.4lf%%\n" ,root->s , root->cnt * 100.0 / n ) ;
inOrder(root->right) ;
}
}
Bnode* createTree(Bnode* root , char s[])
{
if(root == NULL)
root = new node(s,1);
// 创建一个的节点并初始化
else{
int cmp = strcmp(s , root->s);
if(cmp < 0)
{
root->left = createTree(root->left , s) ; // 相当于一个二叉树的遍历吧,
}else if(cmp > 0){
root->right = createTree(root->right , s) ;
}else{
root->cnt = root->cnt + 1 ; // 相同的就直接那个节点就里的一个int 类型的计数器加1.
}
}
return root ;
每次返回一个root节点
}
int main()
{
//freopen("in.txt", "r", stdin);
scanf("%d\n",&n);
int i ;
char s
;
Bnode* root = NULL ;
for(i = 0 ;i < n; i++)
{
gets(s) ;
root = createTree(root , s); // 这个是根节点,每次都是相同的一个。在create函数中一步一步的递归后他他不变,只不过子树变化了。
}
inOrder(root);
return 0 ;
}
运行截图 略
相关文章推荐
- 关于初学者上传文件到github的方法
- css块级元素、内联元素
- jquery实现井字格游戏
- [线性常微分方程][1] 线性系统与线性理论基础LINEAR SYSTEMS AND THE LINEARITY PRINCIPLE
- 从今天开始写写微博,分享技术,记录进步
- cannot open file "mfc42u.lib"解决办法!
- 用macports装了一份openssl
- Jetbrains phpstorm pycharm 免费授权注册码
- centOS6.4安装桌面
- Jetbrains phpstorm pycharm 免费授权注册码
- Android AIDL的总结与介绍
- Thailand vs Soros
- 《剑指offer》:[28]字符串的全排列问题
- C语言基础-函数getchar和函数scanf小结
- VB模拟出的按键精灵大部分功能
- POJ 2154 Color(Polya原理+欧拉函数)
- Zephyr 教程:源码结构
- 链表的逆置
- 安卓的全局变量
- arp欺骗进行流量截获-1