最大堆和插入

时间:2012-11-25 15:43:29

标签: algorithm data-structures heap binary-tree max-heap

我有一个大小为10的整数数组。我需要绘制完成的二叉树。现在我需要使用siftup过程插入其他三个元素。显示每次插入后的最大堆。

我不确定是什么显示每个插入后的最大堆。 这是否意味着每次插入一个元素时我需要显示最大堆的大小?

定义(最大堆)HEAP(X) 设X是一个完全有序的集合。 X上的堆是空的,∅,或者它是一个完整的二叉树,t,包括每个节点的nt≥1个节点,其中X的值被赋值,使得: 节点i的值≤节点i的父节点的值,i = 2,3,...,nt。 堆的大小是树中的节点数。当且仅当其大小为0时,堆为空。

max heap的定义是这样的,但对我来说看起来有点模棱两可。

3 个答案:

答案 0 :(得分:8)

您需要在每次插入后显示生成的树。我的意思是,如果最初你有一堆

   3
  / \
 1   2

你插入一个5,它会从最后一个堆位置开始,然后冒泡到堆头:

    3           5
   / \         / \
  1   2  =>   3   2
 /           /
5           1 

类似地如果插入4,则:

    5           5
   / \         / \
  3   2  =>   4   2
 / \         / \
1   4       1   3

答案 1 :(得分:3)

简单地说,最大堆是一个堆,其中父级的值大于其任何子级的值。当您绘制初始完整的二叉树时,它是否已经是最大堆的形式? 筛选(在我的大学,我们称之为冒泡,但除此之外)在这样的帖子上解释有点复杂,所以我同意@DanteisnotaGeek。维基百科文章有一个很好的图表,说明了筛选程序的工作原理。 要在插入后显示最大堆,要求您绘制二叉树,以便在每次插入后满足最大堆属性。所以最后,你应该有你的初始树,第一次插入的树,第二次插入和第三次插入,所以总共有4棵树。

答案 2 :(得分:0)

在堆中,在任何时刻,从根节点到叶节点都是有序且线性的:

enter image description here

当您将一个元素插入堆中的下一个插槽时,该行的顺序将被更改enter image description here

所以,插入的最后一步将重新排序一个线性数据结构:冒泡排序