C语言如何遍历字典树:
创建一个字典树(Trie)、插入节点、遍历节点、使用递归进行深度优先遍历
在C语言中,字典树(Trie)是一种高效的字符串存储和检索数据结构,特别适用于自动补全和词典相关的操作。字典树的遍历主要涉及深度优先搜索(DFS)和广度优先搜索(BFS),在这篇文章中,我们将详细介绍如何在C语言中实现字典树的创建、插入和遍历,重点探讨使用递归进行深度优先遍历的方式。
一、创建字典树
字典树的基本单元是节点,每个节点包含一个数组指针,这些指针指向其他节点。我们先定义节点的数据结构:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define ALPHABET_SIZE 26
typedef struct TrieNode {
struct TrieNode *children[ALPHABET_SIZE];
bool isEndOfWord;
} TrieNode;
每个节点包含一个长度为26的指针数组(对应26个英文字母)和一个布尔值isEndOfWord
,表示是否是一个单词的结尾。
创建一个新的节点
TrieNode* createNode() {
TrieNode *newNode = (TrieNode*)malloc(sizeof(TrieNode));
if (newNode) {
newNode->isEndOfWord = false;
for (int i = 0; i < ALPHABET_SIZE; i++) {
newNode->children[i] = NULL;
}
}
return newNode;
}
二、插入节点
插入一个单词到字典树中:
void insert(TrieNode *root, const char *key) {
TrieNode *crawler = root;
while (*key) {
int index = *key - 'a';
if (!crawler->children[index]) {
crawler->children[index] = createNode();
}
crawler = crawler->children[index];
key++;
}
crawler->isEndOfWord = true;
}
三、遍历节点
遍历字典树有两种主要方法:深度优先搜索(DFS)和广度优先搜索(BFS)。我们将重点介绍递归实现的深度优先遍历。
深度优先遍历(DFS)
深度优先遍历使用递归的方法访问每一个节点,直到到达叶子节点。在字典树中,这意味着我们需要递归访问每一个子节点,并收集所有的单词。
void dfs(TrieNode *root, char *wordArray, int level) {
if (root->isEndOfWord) {
wordArray[level] = '