二叉树和二叉搜索树的区别

2025年4月19日 | 阅读 7 分钟

首先,我们将分别理解二叉树二叉搜索树,然后我们将探讨二叉树和二叉搜索树之间的区别。

什么是二叉树?

二叉树是一种非线性数据结构,其中一个节点最多可以拥有0、1最多2个子节点。二叉树中的每个节点都表示为父节点或子节点。父节点可以有两个子节点,即左子节点右子节点

在二叉树中,从一个节点到其下一个节点只有一种方式。

二叉树中的一个节点有三个字段

  • 指向左子节点的指针:它存储左子节点的引用。
  • 指向右子节点的指针:它存储右子节点的引用。
  • 数据元素:数据元素是节点存储的数据的值。

二叉树可以表示为

Binary tree vs Binary Search tree

在上图中,我们可以看到每个节点最多包含2个子节点。如果某个节点没有左子节点或右子节点,则相应子节点的指针值将为NULL。

二叉树中使用的基本术语是

  • 根节点:根节点是二叉树的第一个或最顶部的节点。
  • 父节点:当一个节点通过边连接到另一个节点时,该节点称为父节点。在二叉树中,父节点最多可以有2个子节点。
  • 子节点:如果一个节点有其前驱节点,则该节点称为子节点
  • 叶节点:没有子节点的节点称为叶节点
  • 内部节点:至少有两个子节点的节点称为内部节点
  • 节点深度:从根节点到给定节点的距离称为节点深度。我们为所有节点提供标签,例如根节点标记为0,因为它没有深度,根节点的子节点标记为1,根节点的子节点的子节点标记为2。
  • 高度:从根节点到叶节点的最长距离是节点的度

在二叉树中,有一种树称为完美二叉树。它是一种,其中所有内部节点都必须包含两个子节点,并且所有叶节点都必须位于同一深度。对于完美二叉树,二叉树中存在的总节点数可以使用以下公式计算

n = 2m+1-1

其中 n 是节点数,m 是节点的深度。

什么是二叉搜索树?

二叉搜索树是一种遵循某种顺序排列元素的树,而二叉树不遵循任何顺序。在二叉搜索树中,左子节点的值必须小于父节点的值,而右子节点的值必须大于父节点的值。

让我们通过示例来理解二叉搜索树的概念。

Binary tree vs Binary Search tree

在上图中,我们可以看到根节点的值为15,它大于左子树中所有节点的值。根节点的值小于右子树中所有节点的值。现在,我们移动到根节点的左子节点。10大于8且小于12;它也满足二叉搜索树的属性。现在,我们移动到根节点的右子节点;值20大于17且小于25;它也满足二叉搜索树的属性。因此,我们可以说上图所示的树是二叉搜索树。

现在,如果我们将在上面的二叉树中将12的值更改为16,我们需要找出它是否仍然是二叉搜索树。

Binary tree vs Binary Search tree

根节点的值为15,它大于10但小于16,因此它不满足二叉搜索树的属性。因此,它不是二叉搜索树。

二叉搜索树上的操作

我们可以在二叉搜索树上执行插入、删除和搜索操作。让我们了解如何在二叉搜索树上执行搜索。下面显示了我们要对其执行搜索操作的二叉树。

Binary tree vs Binary Search tree

假设我们要搜索上述二叉树中的10。要执行二叉搜索,我们将考虑排序数组中的所有整数。首先,我们创建一个搜索空间中的完整列表,并且所有数字都将存在于搜索空间中。搜索空间由两个指针标记,即start和end。上面二叉树的数组可以表示为

Binary tree vs Binary Search tree

首先,我们将计算中间元素,并将其与要搜索的元素进行比较。中间元素是通过n/2计算的。n的值为7;因此,中间元素是15。中间元素不等于要搜索的元素,即10。

注意:如果要搜索的元素小于中间元素,则将在左半部分进行搜索;否则,将在右半部分进行搜索。相等的情况下,找到元素。

由于要搜索的元素小于中间元素,因此将在左数组中进行搜索。现在搜索空间减半,如下所示。

Binary tree vs Binary Search tree

左数组中的中间元素是10,它等于要搜索的元素。

时间复杂度

在二叉搜索中,有n个元素。如果中间元素不等于要搜索的元素,则搜索空间减小到n/2,我们将继续将搜索空间减小n/2,直到找到该元素。在整个减小过程中,如果我们从n移动到n/2再到n/4,依此类推,则需要log2n步。

二叉树与二叉搜索树的区别

Binary tree vs Binary Search tree

比较基础二叉树二叉搜索树
定义二叉树是一种非线性数据结构,其中一个节点最多可以有两个子节点,即一个节点可以有0、1或最多两个子节点。二叉搜索树是一种有序二叉树,其中遵循某种顺序来组织树中的节点。
结构二叉树的结构是第一个节点或最顶部的节点称为根节点。二叉树中的每个节点都包含左指针和右指针。左指针包含左子树的地址,而右指针包含右子树的地址。二叉搜索树是二叉树的一种类型,其中左子树中所有节点的值小于或等于根节点的值,而右子树中所有节点的值大于或等于根节点的值。
操作可以在二叉树上实现的操作是插入、删除和遍历。二叉搜索树是排序的二叉树,可实现快速的插入、删除和搜索。查找主要实现二叉搜索,因为所有键都按排序顺序排列。
类型二叉树的四种类型是满二叉树、完全二叉树、完美二叉树和扩展二叉树。有不同类型的二叉搜索树,例如 AVL 树、红黑树、伸展树等。
搜索时间复杂度在最坏情况下,搜索的时间复杂度为O(n)。由于其有组织的结构,该方法的平均时间复杂度为O(log n)。这意味着即使输入大小增加,搜索过程也高效且耗时相对较短。
平衡为了保持效率,通常需要平衡技术。可以使用 AVL 树、红黑树或伸展树等方法来实现这种平衡。无需平衡,因为它不强制执行排序约束。
用途通用性强,该方法在不需要特定顺序的情况下有应用,例如表达式树。这些数据结构旨在实现高效的搜索、插入和删除,非常适合字典或数据库索引。它们能够快速定位和操作信息,使其成为这些应用的流行选择。
内存开销该方法通常内存开销较小,因为它不需要排序信息。存储额外信息以维护排序属性通常会导致内存使用量增加。
有序结构在此特定内容中,节点没有固有的顺序或序列。它们独立存在,没有定义的排列。二叉搜索树遵循清晰的结构。左子树中的所有节点都小于根节点,而右子树中的所有节点都大于根节点。
重复值处理该方法中使用的树结构允许重复值。这是因为主要关注点是树本身的结构,而不是其中存储的特定值。系统通常以特定方式处理重复条目。这可能包括允许重复项存在,或应用其他规则,例如将它们存储在单独的数据结构中,或完全忽略它们。
运营效率例如,添加或删除元素的此类操作可能不如二叉搜索树有效,尤其是在管理大型数据集时,因为它们可能需要重新组织树结构。该数据结构旨在平均快速执行搜索、添加和删除。但是,如果树变得不平衡,在最坏情况下,时间复杂度可能会下降到效率较低的线性比例。

下一个主题树与图的区别