这似乎是一个愚蠢的问题,但我现在已经尝试了几个小时,但却无法得到它。我必须使用以下元素构建Min Heap:
120 140 40 50 80 70 60 90 20 100
在第一种方法中,我在引入堆的元素时调整了堆的元素的位置,就像把它推到一个小于它自身的元素一样。结果是:
20 40 60 50 80 120 70 140 90 100
这也是在线堆可视化工具使用的方法。
在第二种方法中,我在每个节点上递归地运行Min-Heapify算法,从n / 2开始逐渐减少到1,其中每个节点的子节点都小于它(两者中较小的两个,如果两者都较小)本身与孩子。结果是:
20 50 40 90 80 70 60 120 140 100
当你看它时,似乎满足了在节点上拥有最小元素并且每个元素小于其子元素的最小堆的要求。我的问题是,为了获得给定的数字序列,我怎么得到两个不同的最小堆,并且两者都有可能有效? (我也尝试使用谷歌搜索,但没有成功)。 非常感谢。
答案 0 :(得分:0)
两者都有效。堆不保证特定元素集的特定结构;它们只保证你提到的规则(根目录中的最高优先级元素,所有元素都优先于它们的后代)。具体结构将根据操作顺序而有所不同。