比较堆和树/

时间:2016-11-19 08:51:56

标签: data-structures tree heap

我是数据结构的新手。

所以我问myselft堆和树有什么不同?

我还在许多文档中看到堆由数组实现,而tree是poniters。是吗?

当我们需要使用树或堆时?

2 个答案:

答案 0 :(得分:1)

计算机科学中的树是表示树结构的抽象数据类型。根节点可以由子节点组成,其中每个子节点也是树。

请注意,并非所有树都是二叉搜索树。二叉搜索树是一个具有2个定义属性的树:

  • 每个节点最多有2个孩子

  • 左孩子少于父母

  • 正确的孩子大于父母

另一种特殊的树是堆。堆是特殊的,因为它具有以下属性:

  • 树中的每个节点始终小于或等于每个子节点。

现在,您如何选择实施树取决于您。树可以通过指针/引用实现;节点存储值及其子节点的指针/引用。

树也可以实现为数组。父项位于索引0.如果最多有d个子项,则索引为i的父项的k子项位于索引d*k+i。在其他条件相同的情况下,我们希望使用数组,因为与遍历指针相比,数组非常快。

但是,二进制搜索树通常使用指针实现。这是因为两个原因。

  1. 如果这是一个数组,它总是必须为最坏的情况分配足够的空间。换句话说,如果您的二叉搜索树的高度为h,则您的数组的大小必须为O(2^h)。这很糟糕,因为您的树只能包含h元素。

  2. 删除也非常耗时。如果删除根节点,则必须将整个子树移位以替换它。我们首先想要使用二叉搜索树的原因是为了保证O(log n)操作,我们不会使用数组。

  3. 一方面,堆通常被实现为一个数组,因为它的树总是完全平衡的(每个节点都有d个孩子,除了可能在叶子上)这意味着浪费的空间非常少所以我们赢了不必担心1)。此外,删除堆不会像二叉搜索树那样大大影响树的结构,因此2)也不适用。

答案 1 :(得分:0)

堆是完全二叉树的一种特殊情况,其中特定节点要么大于其两个子节点,要么小于其子节点。

堆有2种:

最小堆:在此堆中,任何给定节点均小于或等于其两个子节点。 最大堆:任何给定的节点都将大于或等于其两个子节点。

应用程序:

排序:提供最佳的排序复杂性,即。 nlogn并就地执行它,即。无需使用额外的空间。 用于计算运行中值。 用于设置优先级队列。