trie这种树也被称为线索,搜索树。

正如图

以下是用stl 的map来实现

class trie_item_c
{
public:
trie_item_c(){}
trie_item_c(const char nm)
{
name = nm;
} void set_name(const char nm)
{
name = nm;
} trie_item_c * get_child(const char nm)
{
map<const char ,trie_item_c*>::const_iterator it = children.find(nm);
if(it != children.end())
return it->second;
else
{
trie_item_c *cld = new trie_item_c(nm);
children.insert(pair <const char ,trie_item_c*>(nm,cld));
return cld;
}
}
bool find(const char* dic)
{
if(!dic || *dic == '\0')
{
if(children.end() != children.find('\0'))
return true;
return false;
}
const char* temp = dic;
map<const char ,trie_item_c*>::const_iterator it = children.find(*temp);
if(it == children.end())
return false;
return it->second->find(++temp);
}
void print()
{
printf("%c",name);
map<const char ,trie_item_c*>::const_iterator it = children.begin();
for(;it != children.end();it++)
{
it->second->print();
}
printf("\n");
}
virtual ~trie_item_c()
{
map<const char ,trie_item_c*>::const_iterator it = children.begin();
while(it != children.end())
{
delete it->second;
children.erase(it);
it = children.begin();
}
}
private:
map<const char ,trie_item_c*> children;
char name; };

以下代码是构建树的过程

for(const char* dic = lst.first_string();dic;dic = lst.next_string())
{ trie_item_c *temp = root;
for(int i=0;i<str_temp.str_len();i++)
{
char c = str_temp.get(i);
trie_item_c *item = temp->get_child(c);
temp = item;
}
//add one null child
temp->get_child('\0');
}

推断是否一个字root在,只需要调用root->find("book");您可以。



最新文章

  1. CSS3图片翻转切换案例及其中重要属性解析
  2. Control.DataBinding数据绑定简单用法:
  3. Chrome Devtools简介
  4. iOS开发之图片分辨率与像素对齐
  5. 分享书籍[writing idiomatic python ebook]
  6. PMO终究什么样?(2)
  7. 一些牛逼的统计SQL
  8. notepad++中的zencoding的快捷键修改[转]
  9. Swift - 后台获取数据(Background Fetch)的实现
  10. C语言学习笔记-顺序表
  11. Java以及PHP安装环境
  12. PKIX path building failed
  13. main之前初始化流程
  14. Docker 错误 docker: invalid reference format. 的解决
  15. CSS学习——基础分类整理
  16. 2019微软Power BI 每月功能更新系列——2月Power BI 新功能学习
  17. OOM问题定位方法
  18. Java的枚举类型
  19. Leet Code OJ 226. Invert Binary Tree [Difficulty: Easy]
  20. java web 程序---猜数字游戏的猜了多少次的代码

热门文章

  1. Android Unable to execute dex: method ID not in [0, 0xffff]: 65536 问题解决方法
  2. app 自动化测试 Appium+Java可以运行的代码
  3. Tomcat redis 配置
  4. 洛谷 P1205 [USACO1.2]方块转换 Transformations
  5. loadrunne-- Analysis 分析器
  6. 常用到的Linux命令
  7. 修改IIS7并发连接数目限制
  8. 51nod Bash游戏(V1,V2,V3,V4(斐波那契博弈))
  9. 从零开始使用git第一篇:下载安装配置
  10. 为何在查询中索引未被使用 (Doc ID 1549181.1)