2-3 树 (搜索、插入和删除)17 Mar 2025 | 4 分钟阅读 2-3 树2-3 树是一种与普通树相同的数据结构,但它有一些不同的特性,例如任何节点都可以拥有单个值或双个值。因此,2-3 树有两种类型的节点: 单值节点如果一个节点是单值的,那么它有两个子节点。左子节点的值将小于父节点的值,右子节点的值将大于父节点的值。 双值节点如果一个节点有两个值,那么它将有三个子节点。左子节点的值将小于左父节点的值,中间子节点的值将大于左父节点的值但小于右父节点的值。右子节点的值将大于右父节点的值。由于每个节点都有两个或三个子节点,因此称为 2-3 树。它是一棵高度平衡的树,原因是所有叶节点都位于同一层。 由于它看起来像二叉搜索树,因此在搜索元素方面也具有非常好的时间复杂度。这种数据结构的实际应用在于文件系统和数据库系统中的字符串文件。在最坏的情况下,如果树的高度接近元素数量,二叉搜索树的操作成本可能为 O(n),但在 2-3 树的情况下,时间复杂度将为 O(log N)。 这棵树有三种操作: 1. 搜索搜索操作是指我们给出根节点和目标值。如果树中存在该值,则返回 true;否则,返回 false。 我们可以使用递归来搜索树中的任何元素。 情况 1 如果当前节点是单值的,并且目标值小于节点的值,则对左子节点调用递归函数。否则,对右子节点调用递归函数。 情况 2 如果当前节点是双值的,并且目标值小于左值,则对左子节点调用递归函数。如果目标元素大于当前节点的左值且小于当前节点的右值,则对中间子节点调用递归函数。否则,对右子节点调用递归函数。 基本情况 众所周知,递归的基本情况是终止递归调用的最重要条件。如果当前节点为空,则返回 false;或者如果当前节点的值等于目标元素,则返回 true。 2. 插入如果我们要向树中插入一个元素,那么我们将找到它的正确位置,然后插入它。在插入操作中,我们可以有三种情况: 情况 1 假设要插入元素的节点包含一个值。在这种情况下,我们将简单地插入该元素。 例如 ![]() 在上面的例子中,我们只是将目标放在了正确的位置。 情况 2 如果要在其中插入目标元素的节点包含双值且其父节点是单值,那么我们将把元素放在该节点上,节点中的中间值将移至其父节点。然后当前节点将被拆分成两个单独的节点。 例如 ![]() 说明 在上面的例子中,我们有一个目标元素 14,并且要插入它的节点已经有两个值 11 和 12。所以第一步,我们将值插入到正确的位置,现在我们的节点有三个值 11、12 和 14,这是不允许的。所以中间值是 12,它的父节点有一个单值,这意味着我们可以将一个值插入到其父节点。所以我们将 12 插入到父节点,并将当前节点拆分成两个节点,其中一个节点的值是 11,另一个节点的值是 14。 情况 3 如果我们要插入的节点是双值节点,并且其父节点也是双值节点。我们将中间元素移到父节点,并将当前节点拆分。现在它的父节点有三个值,所以它也会将其中间元素移到父节点,并将父节点拆分成两个单独的节点。 3. 删除为了删除一个值,它被它的中序后继替换。如果一个节点剩余的数据值少于一个,则必须将两个节点合并在一起。删除一个值后,如果一个节点变空,则会与其他节点合并。 下一个主题打印数字的第 k 个最低有效位 |
引言:二叉树以其分支和分层结构,在数学和计算机科学中至关重要。根据预定标准系统地命名或计数每种可能的二叉树结构的过程称为二叉树的计数。这个过程对许多领域都很重要,...
阅读 4 分钟
引言 在电子邮件传输领域,"""的概念可能让初学者感到困惑。然而,它在确保您的电子邮件无缝传输方面起着重要作用。本文着重于深入探讨""领域,解释...
阅读 4 分钟
问题陈述给定一个大小为 n x n 的方阵和一个整数 k,我们需要找到矩阵中所有大小为 k x k 的子方块的总和。例如,让我们考虑以下 4x4 矩阵:1 2 3 4 5 6 7 8 9 10……
7 分钟阅读
引言:图是一种基本的数据结构,用于对实体之间的关系进行建模。检测图中的循环是计算机科学中的一个常见问题,并且对于网络路由和资源分配等各种应用至关重要。无向图:无向图由一组顶点组成……
阅读 8 分钟
引言 喜欢快节奏、竞技性环境的程序员可以在竞技编程这个激动人心的领域展示他们解决问题的能力。为了有效地驾驭算法问题的复杂性,需要利用多种数据结构的能力,其中简单的队列独占鳌头...
阅读9分钟
中国邮递员问题或路线检查问题是一种欧拉回路问题,它在不重复访问每条边的情况下找到无向图中最短的闭合路径。这个问题在邮递员需要……
7 分钟阅读
什么是 AVL 树? Adelson-Velskii 和 Landis 发现了它,所以名字来源于他们的名字,即 AVL。它通常被称为高度平衡二叉树。AVL 树是指在每个节点处具有以下特征之一的二叉树...
阅读 4 分钟
对数组进行排序是计算机科学和编程中的一项常见任务。通常,要求是简单地将数组按升序或降序排序。但是,有时需要更复杂的排列。其中一种排列是将数组元素按波浪形排序——交替……
阅读 6 分钟
引言 图的若干问题涉及路径操作以满足给定的规范。例如,重新排序有向图中的路径,如城市零控制所有路径。交通管理和网络路由等实际应用已在本书中说明。本文将...
阅读9分钟
引言:优先级队列是一种数据结构,它存储具有关联优先级的元素,并允许高效地检索具有最高(或最低)优先级的元素。虽然优先级队列有各种实现方法,但一种特别有趣且灵活的方法是使用双向……
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India