1.概述

在本教程中,我们将通过堆和二进制搜索树(BST)数据结构的主要概念。此外,我们将展示他们的相似之处和差异。此外,我们将谈谈它们对这些数据结构的操作的内金宝搏官网188be部实施和时间复杂性。要做,我们将使用一个大O.符号。我们假设具有基本的知识二进制搜索树数据结构。

2.二进制搜索树

二进制搜索树通常表示为非循环图。树由节点组成。如果树是二进制文件,每个节点都有两个孩子。BST具有重要属性:每个节点的值都严格大于其左子子的值,并严格低于其右侧子的值。它意味着,我们可以以排序顺序迭代BST的所有值。此外,此数据结构不允许重复值。

让我们看一下二叉树的例子:

左边的树是二叉树,因为每个节点都有0,1或2个孩子。但是,这不是一个bst。For instance, the root’s right child is 2. 2 is less than the value of the root, which is 15. Furthermore, for a node with a value of 2, its left child has a value of 17, which also violates the BST property. The other two trees on the above image are the Binary Search Trees because every node satisfies the rules of a BST.

二进制搜索树可以是均衡和不平衡。我们可能会注意到,最后一棵树形成一个链,不平衡。但是,这仍然是二进制搜索树。没有违反规则。但是,在这种树中,插入和删除操作效率低下。

认为N成为BST中的节点数量。插入和删除操作的最坏情况是上)但是,在平衡二叉搜索树中,例如在AVL或红黑树中,这种操作的时间复杂度是o(日志(n))另一个主要事实是建立BSTN节点需要O (n * log (n))时间。我们必须插入一个节点N时间,每次插入成本o(日志(n))。二叉搜索树最大的优点是我们可以遍历树得到所有的值上)时间。

3.堆

堆是一个完全二叉树。让我们介绍一些定义,以了解完整的二叉树是什么。

节点处于级别K.如果该节点与根节点之间的距离是树的距离K.。根结点的层数是0。第k级节点的最大可能数目为2 ^ {k}。在完全二叉树的每一层,它包含节点的最大数目。但是,可能除了最后一层,它也必须从左到右填充。理解这一点很重要吗完整的二叉树始终是平衡的。

堆与二进制搜索树不同。这BST是一个有序数据结构,但是,堆不是。在计算机内存中,堆通常表示为数字数组。堆可以是min-heap或max-heap。MIN-和MAX-HEAP的属性几乎相同,但树的根部是MAX-HEAP的最大数字,最小堆的最小值。相似地,MAX-HEAP的主要规则是每个节点下的子树包含比其根节点更少或相等的值。虽然,Min-Heap反之亦然。此外,这意味着,堆允许重复

如果堆是一个完全二叉树,它有树的最小可能高度,也就是o(日志(n))。在阵列中,存储堆节点的位置,索引处的节点的子节点一世是指数的节点2 * i + 12 * i + 2。这意味着,堆从顶部填充到底部。在每层,它从左到右填充。让我们来看看堆的一个例子:

左边的堆是一个min-heap。最小的值具有树的根。而且,对于每个节点,它下面的所有值都大于节点。右边的树是一个max-heap。我们可能会注意到,它具有重复的值。但是,此树满足所有MAX堆属性。这是一个完整的树,每个子树都包含少于或等于其根节点的值。

谈论时间复杂性,金宝搏官网188be我们可以建立一堆O (n * log (n))时间。但是,存在算法,它允许构建堆上)时间。插入并删除操作成本o(日志(n))然而,堆是一个无序的数据结构。使所有元素有序的唯一可能方法是删除树的根N时代。该算法也被称为堆积并采取O (n * log (n))时间。

4.堆vs bst

主要区别在于二进制搜索树不允许重复,但是,堆是否执行。BST被命令,但堆不是。所以,如果订单很重要,那么最好使用BST。如果订单不相关,但我们需要确保插入和删除将采取o(日志(n))时间,然后堆保证这次达到。在二进制搜索树中,这可能会占用上)时间,如果树是完全不平衡的(链是最坏的情况)。此外,堆可以在线性时间内构建,但是BST需要O (n * log (n))要创造。

Java实现了这些结构优先考虑treemp.优先考虑默认情况下是max-heap。treemp.有一个平衡的二进制搜索树作为骨干。其实施是基于a红黑树

结论

在本文中,我们描述了两种常用的数据结构:堆和二叉搜索树。我们已经讨论了它们的结构和金宝搏官网188be操作的时间复杂性。此外,我们还对它们进行了比较,并展示了它们的优缺点。这些数据结构有不同的用途。所以,选择取决于问题。

2评论
最古老的
最新的
内联反馈
查看所有评论
阿基里斯
阿基里斯
6个月前

第二段有一个错误:“BST有一个重要的属性:每个节点的值都严格大于其左子节点的值,也严格大于其右子节点的值。
后来应该“小于”。

Loredana Crusoveanu.
Loredana Crusoveanu.
6个月前
回复阿基里斯

谢谢,我们修复了这句话。

对这篇文章的评论关闭!