基本概念
字典树,又称单词查找树,Trie树,常用于统计、排序和保存大量的字符串。它的优点是利用字符串的公共前缀来减少存储空间以及查询时间,可以最大限度的减少无谓的字符串比较。
其基本特点如下:一个根节点起始,根节点不存储字符,然后除根节点外每一个节点都只包含一个字符;将根节点沿着某一条路径到叶子节点的所有字符排列起来即存储的一个字符串或称为词组;另外就英文字母而言,如果不区分大小写,那么一个节点最大的子节点数是26,且每个子节点包含的字符都不相同。
基本操作有:插入、查找、删除
代码实现
采用c语言实现,分为三个文件:
trie_types.h
包括字典树的结构体定义和基本操作函数的声明
trie.c
字典树基本操作函数的实现
main.c
代码测试
头文件 trie_types.h
#ifndef TRIE_TYPE
#define TRIE_TYPE
#include <stdbool.h>
#define MAX 26
// 只考虑小写,英文最多26个字母,即每个节点最多拥有26个子节点
// 可以灵活的在此结构中添加字段以实现程序的需求
typedef struct TrieNode {
char val; // 存储单个字符
bool isEnd; // 标记单词最后一个字符,即叶子节点
struct TrieNode *next[MAX];
} *Trie, TrieNode;
void init_trie(Trie *trie); // 初始化字典树
void insert_trie(Trie *trie, const char *str); // 插入字符串
void search_trie(Trie *trie, const char *str); // 查找词组是否在字典树中
void delete_trie(Trie *trie); // 删除字典树
#endif
函数实现 trie.c
#include "trie_types.h"
#include <malloc.h>
#include <stdio.h>
static TrieNode *queue[1024]; // 数组实现队列
static TrieNode *<