数据结构《17》---- 自己主动补齐之《二》----Ternary Search Tree

时间:2023-12-19 20:38:56

一、 序言

上一篇文章中,给出了 trie 树的一个实现。

能够看到,trie 树有一个巨大的弊病,内存占用过大。

本文给出还有一种数据结构来解决上述问题---- Ternary Search Tree (三叉树)

二、数据结构定义

Trie 树中每一个节点包括了 26 个指针,但有非常大一部分的指针是 NULL 指针,因此浪费了大量的资源。

一种改进措施就是,以一棵树来取代上述的指针数组。

节点定义例如以下:

一个节点代表了一个字母,左孩子的字母小于当前节点,右孩子的字母大于当前节点。

同一时候每一个节点包括一个标记:指出当前节点是否是单词的结尾。

例如以下图:

这个图非常easy理解错。

我具体解说下面。

首先,根节点是 A。 以 A 为开头的单词都在 中子树中;

左子树表示那些首字母 < A 的单词集合。

中子树表示那些首字母 = A 的单词集合;

右子树表示那些首字母 > A 的单词集合。

黄色表示单词的结尾。

下图中包括下面单词: AB ABCD ABBA BCD

数据结构《17》---- 自己主动补齐之《二》----Ternary Search Tree

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hvdWxpbmp1bg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

三、与 Trie 树的比較

当建立一个 7000+ 的词典时。

1. Trie 树共消耗了大约 22383 * 27 * 4 BYTE = 2.4 M

2. Ternary Tree 共消耗了 22468 * 14 BYTE = 0.31M

能够看出,在内存占用方面 Ternary Tree 较 Trie 树有着巨大的优势。

四、代码