Ternary Search Tree(三元搜索树)是一种特殊的数据结构,它结合了Trie(也称为前缀树)和 Binary Search Tree(二叉搜索树)的特性。在 Trie 中,每个节点通常有 26 个子节点,分别对应 26 个英文字母。而在 Ternary Search Tree中,每个节点只有三个子节点:一个左子节点,一个中子节点,以及一个右子节点。这三个子节点的排列顺序遵循二叉搜索树的规则,即左子节点的值小于当前节点的值,中子节点的值等于当前节点的值,右子节点的值大于当前节点的值。这种数据结构的主要优点是它可以更高效地存储和搜索字符串数据集。由于每个节点有三个指针,而不是26个,所以它可以节省大量空间。此外,由于它结合了二叉搜索树的特性,所以它可以更快地搜索和插入新的键值对。
N叉树(N-ary Tree)
N叉树(N-ary Tree)是一种树形数据结构,它允许每个节点有多达n个子节点,与标准的二叉树不同,后者只允许每个节点最多有2个子节点。下图是一个N-ary Tree的示例:
泛树(Generic Tree)是由节点组成的集合,每个节点是一个数据结构,包含记录和指向其子节点的引用列表(不允许重复引用)。与链表不同,每个节点存储多个节点的地址。每个节点存储其子节点的地址,第一个节点的地址将存储在名为根的单独指针中。泛树是N-ary Tree的一种,具有以下特性:
- 每个节点有多个子节点。
- 每个节点的节点数事先不知道。
根据节点值的不同,树可以分为许多特殊类型。以下是一些常见的类型:
二叉搜索树(Binary Search Tree):在二叉搜索树中,对于每个节点,其左子树中的所有节点的值都小于该节点的值,而其右子树中的所有节点的值都大于该节点的值。这种结构使得查找、插入和删除操作的时间复杂度可以达到O(log n)。然而,如果树不是平衡的,最坏情况下的时间复杂度可能会达到O(n)。
AVL树:AVL树是一种自平衡二叉搜索树。在AVL树中,任何节点的两个子树的高度差都不会超过1。
红黑树(Red-Black Tree):它是一种自平衡二叉搜索树,其中每个节点都有一个颜色属性,通常为红色或黑色。且满足以下性质:
- 节点是红色或黑色。
- 根是黑色。
- 所有叶子都是黑色(叶子是NIL节点)。
- 每个红色节点必须有两个黑色的子节点。
- 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(简称黑高)。
- 红黑树的插入和删除操作相对于二叉查找树要复杂,需要进行调整,以满足红黑树的性质。红黑树的应用非常广泛,比如 Java 中的 TreeMap,JDK 1.8 中的 HashMap、C STL 中的 map 均是基于红黑树结构实现的。
B树(B-Tree):它是一种自平衡的搜索树,用于存储关联数组和排序数据。它是一种多叉树,每个节点可以具有多个子节点。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。