阿里笔试题:
【0、2、1、4、3、9、5、8、6、7】是以数组形式存储的最小堆,删除堆顶元素0后的结果是()
【2、1、4、3、9、5、8、6、7】
【1、2、5、4、3、9、8、6、7】
【2、3、1、4、7、9、5、8、6】
【1、2、5、4、3、9、7、8、6】
应选D,不会的朋友可以先阅读下文。
以下是参考维基百科对堆的解释:
堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。
堆一般是一个完全二叉树,具有以下性质:
1.任意节点小于或等于(大于或等于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)(左子节点“不一定”要大于右子节点)。对应为最小(最大堆)。
2.堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
堆(通常是二叉堆)常用于排序。这种算法称作堆排序。主要运用堆的排序以选择优先。
下面演示最小堆堆顶元素被删除后的自适应过程:用数组来表示该堆:1,4,2,7,9,5,8
堆顶元素1被删除后,最后一个元素8填补堆顶的空缺:
堆顶8与其两个子节点4、2比较,选最小的与堆顶互换,如果堆顶就是最小的,则结束:
节点8所在的节点继续与其子节点比较,重复上一步骤,直到满足:任意节点小于或等于它的所有后裔
至此,结束。用数组来表示该堆:2,4,5,7,9,8
最大堆的形式与之相反,是要满足:任意节点大于或等于它的所有后裔