单词查找树
来源:互联网 发布:spss数据转换 编辑:程序博客网 时间:2024/06/06 19:38
题目描述
在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都画出与单词列表所对应的单词查找树,其特点如下:
1.根结点不包含字母,除根结点外每一个结点都仅包含一个大写英文字母;
2.从根结点到某一结点,路径上经过的字母依次连起来所构成的字母序列,称为该结点对应的单词。单词列表中的每个单词,都是该单词查找树某个结点所对应的单词;
3.在满足上述条件下,该单词查找树的结点数最少。
4.例如图左边的单词列表就对应于右边的单词查找树。注意,对一个确定的单词列表,请统计对应的单词查找树的结点数(包含根结点)。
输入
输入数据为一个单词列表,每一行仅包含一个单词和一个换行/回车符。每个单词仅由大写的英文字母组成,长度不超过63个字母 。文件总长度不超过32K,至少有一行数据。
输出
输出仅包含一个整数,该整数为单词列表对应的单词查找树的结点数。
样例输入
AANASPASASCASCIIBASBASIC
样例输出
13
挺久的代码了,记不太清,注释什么的也懒得写,有问题留言吧。
#include<iostream>#include<map>#include<set>#include<stack>#include<vector>#include<string>#include<sstream>#include<cstring>#include<cstdio>#include<cctype>#include<algorithm>using namespace std;typedef struct tree{ char ch; int nodeNum; struct tree* child[26];}node;int num=0;node* creatree(char cha){ node* t; t=new node; t->ch=cha; t->nodeNum=0; memset(t->child,0,sizeof(t->child)); num++; return t;}node* order(node* t,char cha){ int i; for(i=0;i<t->nodeNum;i++) { if(t->child[i]->ch==cha) return t->child[i]; } if(i==t->nodeNum) { node *it; it=creatree(cha); t->child[t->nodeNum]=it; t->nodeNum++; return t->child[t->nodeNum-1]; }}int main(){ string s; node* root; root=creatree(' '); while(cin>>s) { node* temp; for(int i=0;i<s.length();i++) { if(i==0) temp=order(root,s[i]); else { temp=order(temp,s[i]); } } } cout<<num<<endl; return 0;}
刚开始学的数据结构,还是小白一个。
二叉树这个还是比较好理解的,想之前一个链表我能看一整天。学习真是一个积累的过程,学的越多,学的越快。
阅读全文
0 0
- 单词查找树
- 单词查找树
- 单词查找树
- 单词查找树
- 单词查找树
- 单词查找树
- 单词查找树
- 【NOI2000】单词查找树
- 单词查找树-trie
- 单词查找树
- 字符串:单词查找树
- 单词查找树
- 单词查找树
- 单词查找树
- [RQNOJ322] 单词查找树
- 单词查找树
- 单词查找树
- 单词查找树
- 204. Count Primes
- Java学习笔记(三)——类和对象
- Minidlna
- UIScrollView的contentView 助于理解
- 上传项目到远程仓库GitHub(转)
- 单词查找树
- mysql 基于binlog恢复
- SQL注入之盲注sqli-labs-master
- mybatis中自定义ObjectFactory
- oracleday22(备份 恢复 卸载)
- package com.w3ang.learning.https; import java.security.cert.CertificateException; import java.secur
- 数组的常用编辑
- kmp入门--hd 2203 亲和串
- LaTeX在双栏模式下插入跨栏图表