[搜索]Trie树的实现
2024-08-27 14:11:33
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");您可以。
最新文章
- CSS3图片翻转切换案例及其中重要属性解析
- Control.DataBinding数据绑定简单用法:
- Chrome Devtools简介
- iOS开发之图片分辨率与像素对齐
- 分享书籍[writing idiomatic python ebook]
- PMO终究什么样?(2)
- 一些牛逼的统计SQL
- notepad++中的zencoding的快捷键修改[转]
- Swift - 后台获取数据(Background Fetch)的实现
- C语言学习笔记-顺序表
- Java以及PHP安装环境
- PKIX path building failed
- main之前初始化流程
- Docker 错误 docker: invalid reference format. 的解决
- CSS学习——基础分类整理
- 2019微软Power BI 每月功能更新系列——2月Power BI 新功能学习
- OOM问题定位方法
- Java的枚举类型
- Leet Code OJ 226. Invert Binary Tree [Difficulty: Easy]
- java web 程序---猜数字游戏的猜了多少次的代码
热门文章
- Android Unable to execute dex: method ID not in [0, 0xffff]: 65536 问题解决方法
- app 自动化测试 Appium+Java可以运行的代码
- Tomcat redis 配置
- 洛谷 P1205 [USACO1.2]方块转换 Transformations
- loadrunne-- Analysis 分析器
- 常用到的Linux命令
- 修改IIS7并发连接数目限制
- 51nod Bash游戏(V1,V2,V3,V4(斐波那契博弈))
- 从零开始使用git第一篇:下载安装配置
- 为何在查询中索引未被使用 (Doc ID 1549181.1)