二叉搜索树的优缺点

17 Mar 2025 | 4 分钟阅读

具有以下特征的二叉树称为“二叉搜索树”(BST)

  • 键或值小于节点键的键存在于左子树中。
  • 唯一比节点键高的键存在于右子树中。
  • 二叉搜索树应分别用于左子树和右子树。
Advantages and Disadvantages of Binary Search Tree

二叉搜索树操作

四个基本的 BST 操作是

  • 搜索
  • 遍历
  • 插入
  • 删除

1. BST 中的搜索

比较键值是 BST 搜索过程的必要步骤。如果键值与根键相同,则搜索成功。如果键值小于根键,则搜索也成功。如果键值大于根键,则搜索成功。

使用 BST 算法进行搜索

  • 验证树是否为 NULL;如果不是,则继续下一步。
  • 在这里,我们将搜索键与 BST 的根进行比较。
  • 如果键值小于根值,则我们在左子树中搜索。
  • 如果键值大于根值,则在树的右侧或右子树中搜索。
  • 如果键匹配根,则返回搜索屏幕并报告“搜索成功”。
  • 再次按照步骤 3、4 或 5 来获取子树。

2. BST 中的遍历

  • 二叉搜索树有 4 种不同的遍历方式。
  • 按层遍历节点:从根开始,逐层向上遍历树。
  • 前序遍历:先遍历树的根节点,然后是左子树,最后是右子树。
  • 左子树、根、右子树是节点访问的主要格式,用于遍历。
  • 遍历完所有节点后,格式是左子树、右子树,最后是根。

3. BST 中的插入

在 BST 中插入时会比较键值。如果键值小于或等于根键,则转到左子树,找到一个空位,并将数据放在那里。如果键值大于根键,则在右子树中找到一个空位并将数据添加进去。

4. BST 中的删除

BST 中的删除涉及三种情况。 - 首先通过搜索要删除的键来定位节点。然后确定被删除的节点有多少个子节点。

  • 情况 1:如果要删除叶节点:如果需要删除叶节点,则删除它。
  • 情况 2:如果被删除的节点只有一个子节点:如果一个节点将被删除,并且它只有一个子节点,则删除该节点,并用其子节点替换它的位置。
  • 情况 3:如果要删除的节点有两个子节点:如果被删除的节点有两个子节点,则使用该节点最近的可用值来找到该节点的按中序顺序的前驱或后继。使用上述场景删除按中序顺序排列的后继或前驱。按正确的顺序,用其前驱或后继替换该节点。

二叉搜索树的用途

  • BST 用于索引。
  • 此外,它还用于创建不同的搜索方法。
  • 可以使用 IT 实现多种数据结构。
  • BST 可用于决策支持系统中存储和轻松检索数据。
  • BST 可用于计算机模拟,以快速存储和检索数据。
  • 可以使用 BST 实现快速自动完成系统。

二叉搜索树的实际应用

  • BST 用于数据库中的索引。
  • 使用它来实现搜索算法。
  • 用于实现 Huffman 编码算法。
  • 此外,还使用它来实现字典。
  • 使用它进行数据缓存。
  • 在优先队列中使用它。
  • 在拼写检查器中使用它。

二叉搜索树的优点

  • 当平衡时,BST 在插入和删除方面速度很快。它的时间复杂度为 O,速度很快(log n)。
  • BST 也是一种快速搜索工具,大多数操作的时间复杂度为 O(log n)。
  • BST 工作效率高。由于不需要指针和其他数据结构,它很高效,因为它只存储元素。
  • 为了查找 N 和 M 之间的键(N <= M),我们还可以执行范围查询。
  • 与其他数据结构相比,BST 代码很简单。
  • 由于 BST 可以自动对输入的项进行排序,因此它们始终以排序的顺序存储。
  • BST 易于适应以启用不同的活动或存储更多数据。因此,它是可适应的。

二叉搜索树的缺点

  • 主要的缺点是必须始终实现平衡的二叉搜索树。否则,操作的成本可能不是对数的,而是导致线性数组搜索。
  • 由于搜索、插入和删除操作的时间复杂度为 O(log n),这对于大型数据集来说是很好的,但比数组或哈希表等某些其他数据结构要慢,因此它们不适合需要随机访问的数据结构。
  • 如果 BST 变得不平衡或退化,其复杂性可能会增加。
  • 禁用可以在有序数据结构上执行的几个操作。