Trie树

Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie的简单实现(插入、查询)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。

Trie的简单实现(插入、查询)

  

#include <stdio.h>
#include <string>
using namespace std;

const int branchNum = 26;

struct Trie_node
{
	bool isStr;
	Trie_node *next[branchNum];
	Trie_node()
	{
		isStr = false;
		memset(next, NULL, sizeof(next));
	}
};

class Trie
{
public:
	Trie();
	~Trie();
	void insert(const char* word);
	bool search(char* word);
	void deleteTrie(Trie_node* root);

	Trie_node* root;
};

Trie::Trie()
{
	root = new Trie_node();
}
Trie::~Trie()
{
	deleteTrie(root);
}
void Trie::insert(const char* word)
{
	Trie_node *location = root;

	while (*word)
	{
		if (location->next[*word - 'a'] == NULL)
		{
			location->next[*word - 'a'] = new Trie_node();
		}
		
		location = location->next[*word-'a'];
		word ++;
	}

	location->isStr = true;
}

void Trie::deleteTrie( Trie_node* root )
{
	if (root == NULL)
	{
		return;
	}

	for (int i = 0; i < branchNum; i ++)
	{
		deleteTrie(root->next[i]);
	}
	
	delete root;
}

bool Trie::search( char* word )
{
	Trie_node *locaton = root;

	while (*word && locaton)
	{
		locaton = locaton->next[*word - 'a'];
		word ++;
	}
	
	return(locaton != NULL && locaton->isStr);
}


int main()
{
	Trie trie;
	trie.insert("helloworld!");
	trie.insert("he!");
	trie.insert("helloworlda!");

	if (trie.search("helloworld!"))
	{
		printf("true\n");
	}
	return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120235.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cuda编程基础(建站)

    一:新建CUDA项目流程(VS2013下)1.新建项目(file->New->Project)2.在项目列表中可以看见NVIDIA的CUDA项目(前提是你安装了CUDA)选择项目,添加一些必要的信息,自己定义就行3.项目生生成成功.cu文件就是跑在GPU上面的文件。文件夹里面是自动生成的一些要依赖的库文件你可以不用管二:第一个程序:HelloWorld我们通过最基本最经典的HelloWo

    2022年4月15日
    62
  • mysql转换字符串为数字_mysql字符与数字转换「建议收藏」

    mysql转换字符串为数字_mysql字符与数字转换「建议收藏」本节内容:mysql字符与数字转换的方法1,将字符的数字转成数字,比如’0’转成0可以直接用加法实现。例如:将pony表中的d进行排序,可d的定义为varchar:复制代码代码示例:select*fromponyorderby(d+0)2,在进行ifnull处理时,比如ifnull(a/b,’0′)会导致a/b成了字符串,因此需要把’0’改成0。3,比较数字和varchar时…

    2022年5月30日
    102
  • 逆水寒服务器维护,逆水寒11月29日更新到几点进游戏 逆水寒更新维护公告

    逆水寒服务器维护,逆水寒11月29日更新到几点进游戏 逆水寒更新维护公告

    2021年8月16日
    102
  • 中标麒麟安装deb命令_麒麟源码

    中标麒麟安装deb命令_麒麟源码**中标麒麟NeoKylin-SDK里都有哪些库文件**下边是中标麒麟1-8和14的安装包内容。希望对中标麒麟开发的同学能有些帮助。[root@bogonNeoKylin-SDK]#shinstall.shPleaseselectwhichgroupyouwanttoinstall:1)C-development5)gnome-soft…

    2022年8月10日
    94
  • 解决Oracle锁表[通俗易懂]

    解决Oracle锁表[通俗易懂]1、执行以下语句可查询被锁的表selectb.owner,b.object_name,a.session_id,a.locked_modefromv$locked_objecta,dba_objectsbwhereb.object_id=a.object_id;2、执行以下语句可查询被锁的session和serialselectb.username,b.sid,b.serial#,logon_timefromv$locked_objecta,v$session.

    2022年9月26日
    7
  • pycharm设置成中文_苹果怎么设置语言为中文

    pycharm设置成中文_苹果怎么设置语言为中文Pycharm设置为中文我的Pycharm版本,2021.021.双击打开Pycharm2.选择file,然后选择settings3.根据操作,选择中文语言包,然后点击install安装4.等待安装完成后,进行设置5.重启之后发现页面变成中文…

    2022年8月26日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号