原题链接:信息学奥赛一本通T1337-单词查找树
解题思路:用结构体的办法创建一棵树,外加一个全局变量nodes,每新建一个子叶,nodes加一,最后就可以得出总的结点数了
注意事项:1.创建指针的时候要分配一个空间,不然程序会出错
2.输出总的节点数的时候要记得把根结点加进去
参考代码:
#include<vector> #include<string> #include<iostream> using namespace std; int nodes; struct tree{ vector<tree*>son;//用来存储子结点的指针 char name;//该结点存储的字母 tree(char a){//构造函数,每创建一个新的子叶,就把对应的字母存入 name=a; } tree* addson(char t){//向该结点的儿子放入字母 tree *temp; for(vector<tree*>::iterator iter=son.begin();iter!=son.end();iter++){//用迭代器搜索原有的子结点中是否已经有该字母 temp=*iter; if(temp->name==t)return temp;//在子结点中找到该字母,把子结点地址返回 } temp=new tree(t);//没找到,新建一个子结点 son.push_back(temp); nodes++;//结点数加一 return temp;//依旧要返回子结点地址 } }; int main(){ string t; tree *root,*temp; root=new tree('.');//根结点要分配一个空间,因为写了构造函数,所以这里随便赋个值 while(cin>>t){ temp=root;//每次输入一个单词,都要从根结点开始 for(int i=0;i<t.length();i++){ temp=temp->addson(t[i]);//存入一个字母的同时,进入到存储该字母的结点的空间,直到整个单词全部存入 } } cout<<nodes+1;//把根结点算进来 return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复