判断一个序列是不是堆
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断一个序列是不是堆相关的知识,希望对你有一定的参考价值。
解决这个问题前先来看一个题目,如下:以下序列不是堆的是()
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选项无法满足构成堆的条件
以上是关于判断一个序列是不是堆的主要内容,如果未能解决你的问题,请参考以下文章
C语言关键码序列 66 13 51 76 81 26 57 69 23 谁能给我解释一下答案,见详细,尤其是66怎么跑的