Algorithm 最大堆和插入
我有一个大小为10的整数数组。我需要画一个完整的二叉树。现在我需要使用siftup过程插入其他三个元素。显示每次插入后的最大堆 我不确定每次插入后显示最大堆的是什么。 这是否意味着每次插入一个元素时都需要显示最大堆的大小 定义(最大堆)堆(X) 设X为全序集。X上的堆要么是空的,∅, 或者它是一个完整的二叉树,t,由nt组成≥ 为每个节点分配1个节点,每个节点的值为X,以便: 节点i的值≤ 节点i的父节点的值,i=2,3,…,nt。 堆的大小是树中的节点数。当且仅当堆的大小为0时,堆为空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
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
在堆中,在任何时刻,从根节点到叶节点都是有序且线性的: 当您将一个元素插入堆中的下一个插槽时,该行的顺序将被更改:
因此,插入的最后一步变成了对线性数据结构进行重新排序:气泡排序
最大堆的定义是这样的,但对我来说似乎有点模棱两可。
您觉得哪一部分模棱两可?这正是你需要关注的问题所在。这个答案值得更多的投票,谢谢你的精彩演示。