POJ2418-Hardwood Species
来源:互联网 发布:网络慈善活动策划方案 编辑:程序博客网 时间:2024/05/21 17:49
【题目来源】http://poj.org/problem?id=2418
【题目思路】二叉搜索树
【解题感想】题目就是让你统计各种树木占总量的比例,但数据量非常大。本来想用STL的map的,但是听说会超时,还是没有用,自己写了一个BST。这是我第一次写BST,开始时候完全照pascal语言写的模板抄,但是实际实现时候在指针传递的时候发现一些问题,于是放弃了用指针传来传去的函数模板。不过我还是说一下遇到的问题吧,以备后用,C++对指针的传递也是值传递。在函数内对指针值得改变仍然不影响函数外的指针。如果想在函数内改变外部的指针,有三种解决办法,第一种是按指针的引用传递,比如 int* & parameter;第二种是给函数传递一个二重指针,借助二重指针修改一重的指针;第三种是在函数内return一个指针值。
还有一点需要注意的是,在使用new来分配内存的时候,被分配内存的自定义对象必须有构造函数。这与malloc是不同的,不过比起malloc复杂的指针转化,我还是宁愿写一个构造函数。
在POJ上交这道题的时候,一开始用的cin读入字符串,结果10000ms的时限直接用了9700多ms,换成scanf读入就只用了1200多ms。不过简单起见,该处代码我还是用cin读入
【代码】
#include <iostream>#include <iomanip>#include <cstdlib>using namespace std;struct BSTnode{ string species; double cnt; BSTnode *left,*right; BSTnode() { species=""; cnt=0; left=right=NULL; }};int tot=0;void insert(BSTnode*& root,string x){ BSTnode* ptr=root; while (true) { if (root==NULL) { BSTnode* pNode=new BSTnode; pNode->cnt=1; pNode->left=NULL; pNode->right=NULL; pNode->species=x; root=pNode; return; } if (ptr->species == x) { (ptr->cnt)+=1; return; } else if (x > ptr->species) { if (ptr->right == NULL) { BSTnode* pNode=new BSTnode; pNode->cnt=1; pNode->left=NULL; pNode->right=NULL; pNode->species=x; ptr->right=pNode; return; } else ptr=ptr->right; } else { if (ptr->left == NULL) { BSTnode* pNode=new BSTnode; pNode->cnt=1; pNode->left=NULL; pNode->right=NULL; pNode->species=x; ptr->left=pNode; return; } else ptr=ptr->left; } }}void in_order_traversal(BSTnode* root){ if (root==NULL) return; else { in_order_traversal(root->left); //cout<<root->species<<' '<<root->cnt<<endl; cout<<root->species<<' '<<fixed<<setprecision(4)<<(root->cnt)/(double)tot*100<<endl; in_order_traversal(root->right); }}int main(){ string str; BSTnode* root=NULL; while (getline(cin,str)) { ++tot; insert(root,str); } in_order_traversal(root); return 0;}
- [poj2418]Hardwood Species
- poj2418 - Hardwood Species
- POJ2418-Hardwood Species
- poj2418~Hardwood Species~二叉排序树
- POJ2418--Hardwood Species【map】
- POJ2418--- Hardwood Species
- POJ2418----Hardwood Species
- poj2418(Hardwood Species)
- poj2418 Hardwood Species
- POJ2418——Hardwood Species
- POJ2418 Hardwood Species Tire树
- POJ2418——Hardwood Species
- poj2418 Hardwood Species 排序二叉树
- POJ2418 Hardwood Species(字典树)
- Hardwood Species(poj2418 trie树)
- POJ2418/openjudge Hardwood species 二叉搜索树
- POJ2418 Hardwood Species(二叉搜索树+字典树+MAP)
- poj2418 Hardwood Species STL熟悉+二叉查找树
- HDU 4625 JZPTREE
- 关于musicbox的撰写
- 研究一下 c语言中 的 对齐 补齐
- 尽量不要在生产环境代码中使用boost::this_thread::sleep
- MongoDB简单调研
- POJ2418-Hardwood Species
- 浅析J.U.C的AQS(一):CountDownLatch
- VMWare安装Ubuntu 12.04开启虚拟机的Unity Mode模式
- C语言函数指针基础
- 内核态基本套接字编程
- UVa10250 – The Other Two Trees
- Qt学习之对话框与主窗口的创建
- cocos2d-x手机游戏开发笔记(二)--坐标系
- 剑指Offer算法实现之十九:二叉树的镜像