堆是一种常用的树形结构,是一种特殊的完全二叉树,当且仅当满足所有节点的值总是不大于或不小于其父节点的值的完全二叉树被称之为堆。
堆的这一特性称之为堆序性。因此,在一个堆中,根节点是最大(或最小)节点。如果根节点最小,称之为小顶堆(或小根堆),如果根节点最大,称之为大顶堆(或大根堆)。
注意:堆的左右孩子没有大小的顺序。
关于堆的判断
这道题目完全可以看成一道堆的模板题,只要构建出小顶堆其他都好说。
解题思路
①、构建小顶堆
小顶堆是构成原理:
(1)插入第一个节点
(2)插入第二个节点(不符合小顶堆原则,需替换)
(3)节点互换
…
(4)最终小顶堆结果
//构建小顶堆
void creat(int w){
pile[++cnt] = w;
int t = cnt;
while(t>1&&pile[t/2]>pile[t]){
pile[t] = pile[t/2];
pile[t/2] &#