实现Trie树(C++)


前言

Trie树,又叫前缀树,字典树,单词查找树,是由二叉树衍生出来的一种树形高级数据结构。经常用于处理字符串前缀相关的操作。本文浅析Trie树原理并给出C++代码实现。


一、Trie树原理

Trie树本质上就是一棵从二叉树衍生出来的多叉树,字符串共享前缀,相同前缀的字符串集中在Trie中的一个子树上。减少重复存储,使用较少的空间,且能够实现快速查找字符串。
Trie树节点:
在这里插入图片描述
Trie树实例: 白色表示val为空
在这里插入图片描述

二、Trie树实现(C++)

1.接口

实现几个必要的接口:
1.插入单词
2.查找单词是否存在
3.查找前缀是否存在

2.实现

先定义Trie节点:

struct Node{
    bool is_end;
    Node* son[26];
    Node() {
        is_end = false;
        for (int i = 0; i < 26; i++) son[i] = NULL;
    }
};

Trie实现代码如下:

class Trie {
public:
    Node* root = new Node(); //根节点
    Trie() {
    }
    
    void insert(string word) {  //插入单词
        auto p = root;
        for (auto c : word) {
            int u = c - 'a';
            if (!p->son[u]) p->son[u] = new Node(); //如果不存在则创建节点
            p = p->son[u]; 
        }
        p->is_end = true;
    }
    
    bool search(string word) { //搜索单词
        auto p = root;
        for (auto c : word) {
            int u = c - 'a';
            if (!p->son[u]) return false; //不存在
            p = p->son[u];
        }
        return p->is_end; 
    }
    
    bool startsWith(string prefix) { //查找前缀
        auto p = root;
        for (auto c : prefix) {
            int u = c - 'a';
            if (!p->son[u]) return false;
            p = p->son[u];
        }
        return true;
    }
};

总结

利用了数组+二叉树结构存储键值映射,本质为哈希操作,数组索引表示某个字符。

LeetCode 208.实现Trie(前缀树)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值