我有一个大小为10的整数数组。我需要绘制完成的二叉树。现在我需要使用siftup过程插入其他三个元素。显示每次插入后的最大堆。
我不确定是什么显示每个插入后的最大堆。 这是否意味着每次插入一个元素时我需要显示最大堆的大小?
定义(最大堆)HEAP(X) 设X是一个完全有序的集合。 X上的堆是空的,∅,或者它是一个完整的二叉树,t,包括每个节点的nt≥1个节点,其中X的值被赋值,使得: 节点i的值≤节点i的父节点的值,i = 2,3,...,nt。 堆的大小是树中的节点数。当且仅当其大小为0时,堆为空。
max heap的定义是这样的,但对我来说看起来有点模棱两可。
答案 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)