Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最大堆和插入_Algorithm_Data Structures_Heap_Binary Tree_Max Heap - Fatal编程技术网

Algorithm 最大堆和插入

Algorithm 最大堆和插入,algorithm,data-structures,heap,binary-tree,max-heap,Algorithm,Data Structures,Heap,Binary Tree,Max Heap,我有一个大小为10的整数数组。我需要画一个完整的二叉树。现在我需要使用siftup过程插入其他三个元素。显示每次插入后的最大堆 我不确定每次插入后显示最大堆的是什么。 这是否意味着每次插入一个元素时都需要显示最大堆的大小 定义(最大堆)堆(X) 设X为全序集。X上的堆要么是空的,∅, 或者它是一个完整的二叉树,t,由nt组成≥ 为每个节点分配1个节点,每个节点的值为X,以便: 节点i的值≤ 节点i的父节点的值,i=2,3,…,nt。 堆的大小是树中的节点数。当且仅当堆的大小为0时,堆为空 max

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

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

定义(最大堆)堆(X) 设X为全序集。X上的堆要么是空的,∅, 或者它是一个完整的二叉树,t,由nt组成≥ 为每个节点分配1个节点,每个节点的值为X,以便: 节点i的值≤ 节点i的父节点的值,i=2,3,…,nt。 堆的大小是树中的节点数。当且仅当堆的大小为0时,堆为空


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

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

您需要在每次插入后显示生成的树。我是说,如果一开始你有一堆

   3
  / \
 1   2
插入一个5,它将从最后一个堆位置开始,并将冒泡到堆头:

    3           5
   / \         / \
  1   2  =>   3   2
 /           /
5           1 
类似地,如果插入4,则:

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

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

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


因此,插入的最后一步变成了对线性数据结构进行重新排序:气泡排序

最大堆的定义是这样的,但对我来说似乎有点模棱两可。
您觉得哪一部分模棱两可?这正是你需要关注的问题所在。这个答案值得更多的投票,谢谢你的精彩演示。