输出二叉查找树poj 2418 二叉查找树
改章节朋友在深圳游玩的时候突然想到的...近期就有想写几篇关于输出二叉查找树的文章,所以回家到之后就奋笔疾书的写出来发布了
http://poj.org/problem?id=2418
/*
二叉查找树:对于树中的个每节点X,它的左子树中的全部节点的值小于X的值,它的右子树中的全部节点的值大于X的值;
*/
目题粗心:给出一些单词(包括大小写和格空),单词可以重复涌现(单词最多10000种,最多1000000个)。要求按字典序输出单词并输出个每单词占的比例;
思绪:单词的比拟可以用strcmp,由于单词数较多,直接序排可能超时,若用字典树的话要需的空间大较。因此可以虑考将单词作为二叉查找树的关键字树建,然后按序中遍历输出。
#include<iostream> #include<stdio.h> #include<string.h> #include<stdlib.h> using namespace std; struct node { char word[33]; int cnt; node *left,*right; node(char *n){ strcpy(word,n); cnt=1; left=NULL; right=NULL; } }*root; double count; //插入二叉查找树 node* insert(char *word,node *p) { if(p==NULL){ p=new node(word); } else if(strcmp(word,p->word)<0) p->left=insert(word,p->left); else if(strcmp(word,p->word)>0) p->right=insert(word,p->right); else p->cnt++; return p; } //输出序中遍历结果 void output(node *p) { if(p==NULL) return; output(p->left); printf("%s %.4lf\n",p->word,(p->cnt)/count*100); output(p->right); delete p; } int main() { char word[33]; count=0; while(gets(word)){ root=insert(word,root); count++; } output(root); return 0; }
文章结束给大家分享下程序员的一些笑话语录: 女人篇
有的女人就是Windows虽然很优秀,但是安全隐患太大。
有的女人就是MFC她条件很好,然而不是谁都能玩的起。
有的女人就是C#长的很漂亮,但是家务活不行。
有的女人就是C++,她会默默的为你做很多的事情。
有的女人就是汇编虽然很麻烦,但是有的时候还得求它。
有的女人就是SQL,她会为你的发展带来莫大的帮助。