新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如需理解以下内容,首先你需要了解树的结构;
我们提供的服务有:成都网站设计、成都网站建设、微信公众号开发、网站优化、网站认证、站前ssl等。为数千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的站前网站制作公司pass
, 以该节点为结尾的数量为end
。next
pass
值加一,将末尾节点的end值加一。通过这种操作记录所有经过的数据记录。insert
插入字符串,给前缀树添加一组数据find
查找已存入的字符串个数findContain
输入前缀查找已存在的前缀相同的字符串个数erase
从前缀树中擦除一个字符串及其所存在数据insert
方法需要注意pass的数据增加erase
方法需要注意的是:pass == 0
时,代表其下没有任何可能存在的字符串,所以直接将整棵树删除即可;#includeusing namespace std;
//26 个小写英文字母
#define NUMBER 26
// 节点的结构
class TrieNode
{public:
int pass;
int end;
TrieNode* nexts[NUMBER];
TrieNode()
{pass = 0;
end = 0;
for (int i = 0; i< NUMBER; i++)
{ nexts[i] = nullptr;
}
}
~TrieNode()
{for (int i = 0; i< NUMBER; i++)
{ if (nexts[i]) delete nexts[i];
}
}
};
// 所调用的树结构
class TrieTree
{TrieNode* root = nullptr;
public:
TrieTree()
{root = new TrieNode();
}
// 插入
void insert(string word)
{TrieNode* cur = root;
cur->pass++;
for (int i = 0; i< word.size(); i++)
{
int num = word[i] - 'a';
if (cur->nexts[num] == nullptr)
{ cur->nexts[num] = new TrieNode();
}
cur = cur->nexts[num];
cur->pass++;
}
cur->end++;
}
//查找字符串数量
int find(string word)
{TrieNode* cur = root;
for (int i = 0; i< word.size(); i++)
{ int num = word[i] - 'a';
if (cur->nexts[num] == nullptr) return 0;
cur = cur->nexts[num];
}
return cur->end;
}
//查找前缀数量
int findContain(string word)
{TrieNode* cur = root;
for (int i = 0; i< word.size(); i++)
{ int num = word[i] - 'a';
if (cur->nexts[num] == nullptr) return 0;
cur = cur->nexts[num];
}
return cur->pass;
}
//删除
bool erase(string word)
{if (find(word) == 0) return false;
TrieNode* cur = root;
for (int i = 0; i< word.size(); i++)
{ int num = word[i] - 'a';
if (cur->nexts[num]->pass<= 1)
{ delete cur->nexts[num];
cur->nexts[num] = nullptr;
return true;
}
cur = cur->nexts[num];
cur->pass--;
}
cur->end--;
return true;
}
};
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧