您的位置:首页 > 其它

POJ 2418 Hardwood Species 二叉搜索树

2013-03-11 19:42 369 查看
题目大意:给你很多的树的名称,名称有很多是相同的,请你按字典树输出它们,以及它们所占的比例



比较简单,就不多说了,按理来说这个题目用map会简单很多,但是为了锻炼一下二叉搜索树的写法,自己写了一次!

#include <iostream>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cstdio>

using namespace std;

struct node
{
char s[50];
node *left,*right;
int count;
int way;
node()
{
left=right=NULL;
count=1;
way=-1;
}
};

node *root;
int sum;

void insert_to_tree(char *tm)
{
if(root==NULL)
{
root=new node;
strcpy(root->s,tm);
return;
}
node *p;
node *fp;
fp=root;
p=root;
while(p!=NULL)
{
int x=strcmp(tm,p->s);
if(x==0)
{
p->count++;
return;
}
else if(x<0)
{
fp=p;
fp->way=0;
p=p->left;
}
else
{
fp=p;
fp->way=1;
p=p->right;
}
}
p=new node;
strcpy(p->s,tm);
if(fp->way==0)
{
fp->left=p;
}
else
{
fp->right=p;
}
return ;

}

void show_tree(node *p)
{
if(p==NULL)
return;
if(p->left!=NULL)
show_tree(p->left);
printf("%s %.4f\n",p->s,(double)p->count/(double)sum*100);
if(p->right!=NULL)
show_tree(p->right);
}

int main()
{
char tm[50];
root=NULL;
sum=0;
while(gets(tm)!=NULL)
{
// puts(tm);
sum++;
insert_to_tree(tm);
// if(sum==29)
// break;
}
show_tree(root);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: