您的位置:首页 > 理论基础 > 数据结构算法

数据结构-线段树Trie

2016-05-17 06:47 337 查看
闲来没事写了个带前缀的线段树模版。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>

using namespace std;

struct Trie
{
int val;
Trie *next[26];
};

void insert(Trie *root, string s)
{
Trie *p = root;
for (auto i = s.begin(); i != s.end(); i++) {
int idx = *i - 'a';
if (p->next[idx] == nullptr) {
p->next[idx] = new Trie;
}
p = p->next[idx];
p->val++;
}
}

Trie *search(Trie *root, string s)
{
Trie *p = root;
for (auto i = s.begin(); i != s.end(); i++) {
int idx = *i - 'a';
if (p->next[idx] == nullptr) {
return nullptr;
}
p = p->next[idx];
}
return p;
}

void remove(Trie *root, string s)
{
Trie *p = root;
int k = search(root, s)->val;
if (k == 0) {
return;
}
for (auto i = s.begin(); i != s.end(); i++) {
int idx = *i - 'a';
p = p->next[idx];
p->val -= k;
}
for (int i = 0; i < 26; i++) {
p->next[i] = nullptr;
}
}

int main()
{
Trie *root = new Trie;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: