C++ 高级数据结构——Trie树

Trie树是一种高级数据结构,用于存储和检索字符串,利用字符串的公共前缀减少存储和查询时间。节点的子孙共享相同前缀,非所有节点都有值,仅叶子节点和部分内部节点保存键值。它能有效提高字符串查找效率。
摘要由CSDN通过智能技术生成

trie树,又称字典树或前缀树,是一种有序的、用于统计、排序和存储字符串的数据结构,它与二叉查找树不同,关键字不是直接保存在节点中,而是由节点在书中的位置决定。
一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。
trie树的最大优点就是利用字符串的公共前缀来减少存储空间与查询时间,从而最大限度地减少无谓的字符串比较,是非常高效的字符串查找数据结构。

#include<stdio.h>
#define TRIE_MAX_CHAR_NUM 26
//定义TrieNode
struct TrieNode
{
   
 TrieNode* child[TRIE_MAX_CHAR_NUM];
 bool is_end;
 TrieNode() : is_end(false)
 {
   
  for (int i = 0; i < TRIE_MAX_CHAR_NUM; i++)
  {
   
   child[i] = 0;
  }
 }
};
//TrieNode的前序遍历
void preorder_trie(TrieNode* node, int layer)
{
   
 for (int i = 0; i < TRIE_MAX_CHAR_NUM; i++)
 {
   
  if (node->child[i])
  {
   
   for (int j = 0; j < layer; j++)
   {
   
    printf("---");
   }
   printf("%c", i+'a');
   if (node->child[i]->is_end)
   {
   
    printf("(end)");
   }
   printf("\n");
   preorder_trie(node->child[i], layer + 1);
  }
 }
}
int main()
{
   
 TrieNode root;
 TrieNode n1;
 TrieNode n2;
 TrieNode n3;
 root.child['a' - 'a'] = &n1;
 root.child['b' - 'a'] = &n2;
 root.child['e' - 'a'] = &n3;
 n2.is_end = true;
 TrieNode n4;
 TrieNode n5;
 TrieNode n6;
 n1.child['b' - 'a'] = &n4;
 n2.child['c' - 'a'] = &n5;
 n3.child['f' - 'a'] 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值