1.介绍

在本文中,我们将介绍自平衡二进制搜索树 - 一种数据结构,其通过约束其自己的高度来避免标准二进制搜索树的一些陷阱。然后我们将在实施一个流行的变体 - 左侧倾斜的红黑色二进制搜索树。

2.二叉搜索树

二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于其左子树中的所有节点的值,小于或等于其右子树中的所有节点的值。

例如,二分搜索可能是这样的:

有几个与二叉搜索树相关的关键术语:

  • 一个是没有子节点的节点。
  • 节点深度指从根到(并包括)该特定节点的路径上的节点数。
  • 最大深度二叉树的深度指的是它最深的叶结点的深度。我们也可以把这个度量称为树高
  • 一个树平衡如果,对于树中的每个节点,其左右子树的高度最多相差1。

要快速复习二叉搜索树,请查看本文

3.BST操作

通常,二叉搜索树将支持插入、删除和搜索操作。每个操作的代价取决于树的高度-在最坏的情况下,操作将需要遍历从根到最深的叶子的路径上的所有节点。

如果我们的树严重倾斜,问题就出现了。例如,让我们考虑这棵树:

虽然这仍然是一个有效的二叉搜索树,但它显然不是很有用。如果要查找、插入或删除一个节点,可能需要遍历树中的每个节点!

因此,每个操作的最坏情况成本是\ bf {o(n)},因为n树中的节点数。

相反,我们想要的是一棵树平衡

平衡树是指,对于每个节点,其左右子树的高度最多相差1。因此,平衡树的高度是有限的\ bf {O (log_2n),意味着每次操作都要花费成本\ bf {O (log_2n)在最坏的情况下是时间。这是一个显著的改进上)!

4.自我平衡的BSTS

一种方法可以确保我们的树始终是平衡的,是通过实施一个自平衡二叉搜索树。这样的树总是将高度保持在最低,以确保它们的操作将始终保持在最坏情况下的成本\ bf {O (log_2n)

自平衡bst有很多种类型。每种类型略有不同,但主要思想是,我们检查树在任何状态更改(即树上的任何插入或删除)后是否保持平衡。如果不是,我们将自动对树执行一些转换,将其返回到平衡/合法状态。

让我们来看看一种特殊的自平衡二叉搜索树:左倾红黑BST。

5.左倾的红黑BST

左倾的红黑树通过执行几个属性来保持其高度最小:

  1. 树的每条边都是红色或黑色的
  2. 节点只能触摸一个红色边缘
  3. 从根节点到每个空叶节点的黑边数相等

当这些属性保持不变时,也就是说,当树处于“合法”状态时,树的高度最多为02 \ log_2 n。但我们如何保持法律状态?

5.1。保持平衡

为此,我们只需检查每个属性在任何插入或删除操作之后是否存在。如果树变得不平衡,我们将执行一些转换以将树返回到合法状态。

更具体地说,我们在树节点上执行了三种类型的转换:

  1. 左转
  2. 正确的旋转
  3. 颜色翻转

让我们仔细看看这些转换并实现它们。

5.2。左转

对于这个变换,我们执行一次向左旋转来切换红色链接的方向。我们可以想象这个过程:

我们可以这样写伪代码:

QuickLatex.com呈现

5.3。正确的旋转

这种转变只是我们左旋转的反面:

因此,这个变换的伪代码是:

QuickLatex.com呈现

5.4。颜色翻转

颜色翻转处理两个相邻的红色链接接触一个节点的非法状态。在本例中,我们有效地将两个链接的颜色与上面的单个链接交换。这个地方州是合法的:

我们可以这样实现这个函数:

QuickLatex.com呈现

5.5。是红色的函数

事实证明,实现这三个旋转的某些序列总是可以将树返回到法律状态。挺整洁的!

红黑树还需要一个辅助函数:is - red函数。这只是告诉我们一个节点是否为红色:

QuickLatex.com呈现

5.6。插入到红黑树

使用上面定义的辅助函数,我们现在可以实现红黑树。

我们先来看插入。正如我们前面提到的,将节点插入红黑树主要模仿标准BST插入。我们只有一个额外的步骤:在插入之后,我们检查以确保我们的树仍然是“合法的”,如果不是,我们需要使用一系列转换将它返回到“合法的”状态。

所以,我们有转型职能。但是如何决定我们需要实现哪些功能序列,重新平衡树?当然有很多案例需要考虑。

实际上,只需要几行代码就可以涵盖所有这些情况。让我们一起来看看:

QuickLatex.com呈现

5.7。运营成本

当这些属性保持时,树的高度不能大于2次2ñ。此外,每个旋转仅花费我们的恒定时间。

因此,Red-Black树中的最坏情况下的插入,删除和搜索操作将受到约束\ bf {O (2 log_2n) = O (log_2n)}最佳情况和平均情况的复杂性也受到O (\ log_2 n)

6.结论

在本文中,我们看到了二叉搜索树如何通过实现一些自平衡来显著改善它们的最坏情况代价。

我们看到几行代码可以采用标准二进制搜索树,使其自平衡红黑色BST。

评论在本文上关闭!