庞发月


私信TA

用户名:PANGFAYUE

访问量:477

签 名:

等  级
排  名 14254
经  验 851
参赛次数 2
文章发表 2
年  龄 0
在职情况 学生
学  校 湖南大学
专  业

  自我简介:

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

  评论区