判断一个序列是不是堆

解决这个问题前先来看一个题目,如下:
以下序列不是堆的是()
A.(100,85,98,77,80,60,82,40,20,10,66)
B.(100,98,85,82,80,77,66,60,40,20,10)
C.(10,20,40,60,66,77,80,82,85,98,100)
D.(100,85,40,77,80,60,66,98,82,10,20)
要解决这个问题就要知道关于判断堆的知识:
堆分为最大堆和最小堆,如果把一个数列画为一颗二叉树的话,那么根结点是i,左子树是2i,右子树是2i+1。对于最大堆而言,所有的根节点都大于其左右子树,而在最小堆中,所有的根节点都小于其左右子树。
所以这道题目中的A,B选项可以构成最大堆,C选项可以构成最小堆,而只有D选项无法满足构成堆的条件

猜你喜欢

转载自blog.51cto.com/14289397/2481822