解题思路:用结构体的办法创建一棵树,外加一个全局变量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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论