1 什么是trie

trie是一棵多叉树,假如存放的是由26个字母(不区分大小写)构成的字符串的话,那么就是一棵26叉树。

trie树是一棵前缀树,因为每个结点只保存字符串中的一个字符,整个字符串保存在路径中。

trie树的根结点里面不保存任何字符,因为根结点是下面所有路径的前缀,如果固定为一个字符的话,那么该trie树只能保存以该字符为前缀的字符串了。

trie树的每个结点要保存两类数据,一个是字符(root结点不保存),一个是到该字符所有后缀的结点的指针,比如26个字母的话,就是到该字符所有可能后缀的数组,一个保存26个指针的数组。

如果字符串不是很充分的话,trie树会浪费空间,因为会存在很多的null指针。

2 什么是binary search tree

和trie将key存放在树的路径中不同的是,binary search tree将key存放在每个结点中

binary search tree的左子树中所有的结点的值小于该结点的值,所有的右子树中的所有结点的值大于该结点的值。

所以,在binary search tree中查找时,每次比较之后,如果小于该结点的值的话,就往其左子树中继续找,如果大于该结点的值的话,就往其右子树中继续找。

因为涉及到一个平衡的问题,所以还有红黑树和avl树,它们都是自平衡的binary search tree。

3 什么是ternary trie

ternary trie是trie和binary search tree的杂交体。

ternary trie也是将key保存在路径中,但是和trie不同的是,key的整个字符串不是保存在连续的路径中。每个结点只保存一个前缀字符。

ternary trie的每个结点都保存三个指针,一个是字符等于该结点处保存的字符的子树的指针,一个是字符小于该结点处保存的字符的子树的指针,还有一个是字符大于该结点处保存的字符的子树的指针。

由于一个结点只保存一个前缀字符,所以,很可能该前缀字符并不是我们当前要找的字符,那么就要继续找子树,直到找到了当前字符为止,因此保存key字符串的路径可能不是连续的,是断开的。因此,ternary trie也不需要像trie那样root结点不能用。

4 怎样创建trie

见分析。

5 怎样创建binary search trie

见分析。

6 怎样创建ternary trie

见分析。

Trie(前缀树)和ternary trie和binary search tree的更多相关文章

  1. Java实现 LeetCode 208 实现 Trie (前缀树)

    208. 实现 Trie (前缀树) 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie() ...

  2. [Swift]LeetCode208. 实现 Trie (前缀树) | Implement Trie (Prefix Tree)

    Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...

  3. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...

  4. leetcode 208. 实现 Trie (前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...

  5. 第15个算法-实现 Trie (前缀树)(LeetCode)

    解法代码来源 :https://blog.csdn.net/whdAlive/article/details/81084793 算法来源:力扣(LeetCode)链接:https://leetcode ...

  6. 实现 Trie (前缀树)

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...

  7. 力扣208——实现 Trie (前缀树)

    这道题主要是构造前缀树节点的数据结构,帮助解答问题. 原题 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = ...

  8. 数据结构—— Trie (前缀树)

    实现一个 Trie (前缀树),包含 插入, 查询, 和 查询前缀这三个操作. Trie trie = new Trie(); trie.insert("apple"); trie ...

  9. 力扣 - 208. 实现Trie(前缀树)

    目录 题目 思路 代码 复杂度分析 题目 208. 实现 Trie (前缀树) 思路 在我们生活中很多地方都用到了前缀树:自动补全,模糊匹配,九宫格打字预测等等... 虽然说用哈希表也可以实现:是否出 ...

随机推荐

  1. EmpireofCode文档翻译 https://empireofcode.com/game/

    In Campaign mode, you can check your strategies on already defeated bases. You will not lose your tr ...

  2. C#如何根据DataTable生成泛型List或者动态类型list

    背景:在项目中,sql语句检索返回DataTable,然后根据检索结果做进一步的操作,本篇文章即是介绍如何将DataTable快速生成泛型List返回. 假设存在如下学生类: public class ...

  3. P1880 NOIP 1995石子合并

    复习(du) 这道题,发现思想真不错 当时背板子打下来的 要下晚自习了,明天更注释吧 #include<iostream> #include<queue> #include&l ...

  4. zoj 2724 Windows Message Queue

    Windows Message Queue Time Limit: 2 Seconds      Memory Limit: 65536 KB Message queue is the basic f ...

  5. POJ 2513 无向欧拉通路+字典树+并查集

    题目大意: 有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现 这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧 ...

  6. HDU 3062 简单的2-SAT问题

    在2-SAT,最让我纠结的还是添加有向线段的函数了 void add_clause(int i,int a,int j,int b){    int m=2*i+a;    int n=2*j+b;  ...

  7. 【三分+精度问题】G. Toxophily

    https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/G [题意] 已知人的坐标在(0,0),靶的位置在(x,y),人以速度v射箭并且射 ...

  8. bzoj 3207 花神的嘲讽计划Ⅰ 主席树+hash

    花神的嘲讽计划Ⅰ Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3112  Solved: 1086[Submit][Status][Discuss] ...

  9. NodeJS仿WebApi路由

    用过WebApi或Asp.net MVC的都知道微软的路由设计得非常好,十分方便,也十分灵活.虽然个人看来是有的太灵活了,team内的不同开发很容易使用不同的路由方式而显得有点混乱. 不过这不是重点, ...

  10. Android视图组成View

    视图组成View 创建时间: 2013-9-13 10:51 更新时间: 2013-9-13 11:04