知识点
参考网站:https://www.cnblogs.com/embedded-linux/p/7302390.html
heap概述
堆(Heap)是计算机科学中一类特殊的数据结构的统称,堆通常是一个可以被看做一棵树的数组对象。
1、堆是一棵完全二叉树;
2、堆中的某个结点的值总是大于等于(最大堆)或小于等于(最小堆)其孩子结点的值。
3、堆中每个结点的子树都是堆树。
最大堆max-heap:每个节点的键值(key)都大于或等于其子节点键值
最小堆min-heap:每个节点的键值(key)都小于或等于其子节点键值
完全二叉树整棵树内没有任何节点漏洞,这带来一个好处:我们可以利用array来存储所有节点。假设我们动用一个小技巧,将array的#0元素保留(或设为无限大值或无限小值),那么完全二叉树中的某个节点位于array的i处时,其左子节点位于array的2i处,其右子节点位于array的2i+1处,其父节点位于“i/2"。
注:完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。
完全二叉树整棵树内没有任何节点漏洞,这带来一个好处:我们可以利用array来存储所有节点。假设我们动用一个小技巧,将array的#0元素保留(或设为无限大值或无限小值),那么完全二叉树中的某个节点位于array的i处时,其左子节点位于array的2i处,其右子节点位于array的2i+1处,其父节点位于“i/2"。
1.1 If a complete binary tree with 137 nodes is stored in an array (root at position 1), then the nodes at positions 128 and 137 are at the same level.
【解释】
第N层(0=<N)最多有2^N个数,
第一个序号为2^N,
最后一个为2^(N+1)-1
128-255内的都属于同一层
2.1 In a max-heap with n (>1) elements, the array index of the minimum key may be __.
【解释】
完全二叉树整棵树内没有任何节点漏洞,这带来一个好处:我们可以利用array来存储所有节点。假设我们动用一个小技巧,将array的#0元素保留(或设为无限大值或无限小值),那么完全二叉树中的某个节点位于array的i处时,其左子节点位于array的2i处,其右子节点位于array的2i+1处,其父节点位于“i/2"。
本题n/2是n的父亲,肯定不是最小的(不在最高层),因此必须>n/2
2.2 Using the linear algorithm to build a min-heap from the sequence {15, 26, 32, 8, 7, 20, 12, 13, 5, 19}, and then insert 6. Which one of the following statements is FALSE?
构造min-heap的方式如下:
- 首先minheap始终是个完整的二叉树,新插入的数应该先放在二叉树的新的叶节点上
- 如果新的数大于他的parent,也就没啥问题,继续插入上一个
- 如果小于他的parent,那么就要把两个位置调换一下,然后继续和他的新的parent比较,循环比较,直到他大于parent或者到根,然后放入这个数
比如这个题插入第四个数的时候:
先放入:
8<26,换位置
8<15,继续换位置,
到根了,继续放下一个数7,blabla,总之就是这么插入,这个题我没复制,忘了答案是啥啦,画个图一个个插入就行了