首页 > 代码库 > 数据结构《17》---- Ternary Search Tree
数据结构《17》---- Ternary Search Tree
一、 序言
上一篇文章中,给出了 trie 树的一个实现。可以看到,trie 树有一个巨大的弊病,内存占用过大。
本文给出另一种数据结构来解决上述问题---- Ternary Search Tree (三叉树)
二、数据结构定义
Trie 树中每个节点包含了 26 个指针,但有很大一部分的指针是 NULL 指针,因此浪费了大量的资源。
一种改进措施就是,以一棵树来代替上述的指针数组。
节点定义如下:
<script src="https://code.csdn.net/snippets/319844.js" type="text/javascript"></script>
一个节点代表了一个字母,左孩子的字母小于当前节点,右孩子的字母大于当前节点。
同时每个节点包含一个标记:指出当前节点是否是单词的结尾。
如下图:
这个图很容易理解错。我详细讲解以下。
首先,根节点是 A, 以 A 为开头的单词都在 中子树中;
左子树表示那些首字母 < A 的单词集合;
中子树表示那些首字母 = A 的单词集合;
右子树表示那些首字母 > A 的单词集合;
黄色表示单词的结尾;
下图中包含以下单词: AB ABCD ABBA BCD
三、与 Trie 树的比较
当建立一个 7000+ 的词典时,
1. Trie 树共消耗了大约 22383 * 27 * 4 BYTE = 2.4 M
2. Ternary Tree 共消耗了 22468 * 14 BYTE = 0.31M
可以看出,在内存占用方面 Ternary Tree 较 Trie 树有着巨大的优势。
四、代码
<script src="https://code.csdn.net/snippets/319837.js" type="text/javascript"></script>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。