Trie树

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

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

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

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;
}

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 101道算法javaScript描述【一】

    101道算法javaScript描述【一】数据结构与算法是计算机专业必修课,但是对于前端工程师来说,沉浸在业务代码之中很少会和算法直接打交道,甚于说根本不需要用到什么算法。那么我们为什么要学习算法,意义何在?不会算法活不是一样能干。把一件事情做到极致是非常必要的职业心态,这离不开数据结构和算法。另一方面,再说面试,这和在学生时代为什么要学数理化是一个道理,考试要考,你就要学。面试造火箭,工作拧螺丝,面试官通过问几道算法题了解你的编程和逻辑思维能力并不奇怪。万丈高楼平地起,基础知识掌握多少,一定程度上决定了我们的技术能走多远。想要作出一点事情,基础一

  • 什么是php递归算法_PHP递归算法(一)

    什么是php递归算法_PHP递归算法(一)在前面的文章中,我们为大家介绍了PHP算法系列之《PHP随机取一算法》和《PHP冒泡排序算法》,需要的朋友可以了解学习。本篇文章我们将继续为大家带来常见的PHP算法,即PHP递归算法。在PHP开发过程中,递归算法通常用于无限极分类。那么所谓递归就是一种函数调用自身的机制。简单来说就是在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用。…

  • obs录制黑屏怎么解决_obs窗口捕获黑屏

    obs录制黑屏怎么解决_obs窗口捕获黑屏00.目录文章目录00.目录01.问题描述02.问题分析03.问题解决04.成功测试01.问题描述打开OBS后,新建场景、新建显示器捕获后,黑屏没有显示,即使点击开始录制,然后结束录制后,录制的视频仍然是黑屏。02.问题分析安装包是从官网下载的,安装过程没有报错,启动过程也没有报错,但是却捕捉不到显示器中的图像。首先考虑的是软件兼容性的问题,但是在我将兼容性设置成”W…

  • java gridbagconstraints_GridBagConstraints

    java gridbagconstraints_GridBagConstraintsGridBagConstraintsjavaGui|2014-05-1412:54:00|阅读1737次|评论(1)importjavax.swing.*;importjava.awt.*;publicclassdemo_7{publicstaticvoidmain(String[]args){demo_7_1test=newdemo_7_1();}}clas…

  • 二叉树经典问题——已知中序和前序重建二叉树

    二叉树经典问题——已知中序和前序重建二叉树运用前序和中序序列重建二叉树及其相关应用重建过程1,在二叉树的学习中经常会遇到一类问题,就是给出一棵二叉树的前序和中序序列(后序和中序类似)然后求树的深度、树的后序序列、树的各种遍历等等问题,这个时候如果能根据相关的序列把其代表的二叉树重建出来,那么所有的问题便会迎刃而解。博文的第一部分就给出相关的重建步骤。2,重建中最关键的一点是从前序中找根然后在后序中用相应的根把树‘分解’。举个例子:

  • android 安装p12证书,如何在Android中使用p12证书(客户端证书)

    android 安装p12证书,如何在Android中使用p12证书(客户端证书)我试图在android中使用客户端证书。我得到了一个.p12文件,我想用它来对服务器进行身份验证。如何在Android中使用p12证书(客户端证书)我正在使用portecle将.p12文件转换为.bks文件,但我似乎没有得到它的工作。下面的代码:packagecom.pa1406.SECURE;importjava.io.InputStream;importjava.security.Ke…

发表回复

您的电子邮箱地址不会被公开。

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