概述
本篇文章可以用来练习C++,可以学习以下知识:
- C++编程规范
- C++基本语法
- 面向对象编程,类的定义和声明
- 运算符重载
- 掌握另一种数据结构,帮你在前进的道路上披荆斩棘
一张图介绍前缀树
比如现在有两个单词,"hello"和“help”, 只是为更加清楚的说明前缀树的作用,这里就不用“hello”和“world”了。
正如图中所看到的,前缀树中的所有单词公用相同的前缀节点,这样在匹配是也更加容易匹配。
实现一颗词典书
声明:
- 这里实现的单词书只支持小写(可以想办法改进,支持任意字符串)
- 只支持单词插入和查找(可以添加删除)
#include <iostream>
#include <string>
/**
* @brief TrieNode表示前缀树中的节点
*/
class TrieNode{
public:
TrieNode();
~TrieNode();
private:
TrieNode* child_[26]; //用于表示26个英文字母所在的节点
bool is_word_; //表示以当前字符结束的单词是否是之前插入的单词
public:
friend class Trie;
};
/**
* @brief 构造函数,初始化成员变量,初始化子节点指向空
* 将 is_word_ 初始化为 false
*/
TrieNode::TrieNode(): is_word_(false){
for(int i = 0; i < 26; i++){
child_[i] = nullptr;
}
}
/**
* @brief 析构函数,释放掉该节点
* 将 is_word_ 初始化为 false
*/
TrieNode::~TrieNode(){
for(int i = 0; i