(1)由性质5只能插在奇数层,即根节点处,7下沉到右堆的min level,10下沉到max level,插入后满足min-max heap性质,很容易画出:

(2)由性质80也是向右堆插入,且插入到偶数层,处在max level,40则要下沉,为了满足性质,故直接下沉至10的右子树位置,即max level层

(3)一般前两题画图是为写代码做铺垫,先分析一下:

从插入位置进行调整,调整过程由下到上。首先根据元素个数求出插入元素所在层次数,以确定其插入层是最大层还是最小层。

若插入元素在最大层,则先比较插入元素是否比双亲小,如是,则先交换。之后,将小堆与祖先调堆,直到满足小堆定义或到达根结点:若插入元素不小于双亲,则调大堆,直到满足大堆定义。

若插入结点在最小层,则先比较插入元素是否比双亲大,如是,则先交换,之后,将大堆与祖先调堆;若插入结点在最小层且小于双亲,则将小堆与祖先调堆,直到满足小堆定义或到达根结点。

void MinMaxHeapIns(RecType R[],int n)
{
//假设R[1..n-1]是最小最大堆,插入第n个元素,把R[1..n]调成最小最大堆
j=n; R[0]=R[j];
h=[log2n]+1; //求高度这里[]表示向下取整
if(h%2==0) //插入元素在偶数层,是最大层
{
i=n/2;
if(R[0].key<R[i].key)
{
//插入元素小于双亲,先与双亲交换,然后调小堆
R[j]=R[i];
j=i/4;
while(j>0 && R[j]>R[i])
{
//调小堆
R[i]=R[j];
i=j;
j=i/4;
}
R[i]=R[0];
}
else
{
//插入元素大于双亲,调大堆
i=n;
j=i/4;
while(j>0 && R[j]<R[i])
{
R[i]=R[j];
i=j;
j=i/4;
}
R[i]=R[0];
}
}
else //插入元素在奇数层,是最小层
{
i=n/2;
if(R[0].key>R[i].key)
{
//插入元素大于双亲,先与双亲交换,然后调大堆
R[j]=R[i];
j=i/4;
while(j>0 && R[j]<R[i])
{
//调大堆
R[i]=R[j];
i=j;
j=i/4;
}
R[i]=R[0];
}
else
{
//插入元素小于双亲,调小堆
i=n;
j=i/4;
while(j>0 && R[j]>R[i])
{
R[i]=R[j];
i=j;
j=i/4;
}
R[i]=R[0];
}
}
}

最新文章

  1. 前端学习 第六弹: javascript中的函数与闭包
  2. JavaScript学习笔记-选择器集合调用方法
  3. TF-IDF算法
  4. String.split使用竖线做为分隔符
  5. activity_main.xml与fragment_main.xml
  6. c#中格式化导出Excel数据
  7. 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List&lt;类名&gt;的比较
  8. Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现
  9. GitHub使用教程for VS2012
  10. Delphi中的四舍五入函数
  11. size()函数的使用
  12. 转载有个小孩跟我说LINQ(重点讲述Linq中GroupBy的原理及用法)
  13. Qt在VS2013或Qt Creator 中的控制台输出方式设置
  14. BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草( dp )
  15. poj 2513 Colored Sticks(欧拉路径+并检查集合+特里)
  16. 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版
  17. iOS pods-xxxx-frameworks.sh:permission denied问题
  18. openstack Q版部署-----keystone认证服务安装配置(3)
  19. RabbitMQ fanout类型的Exchange
  20. XVFB实现selenium在linux上无界面运行安装篇

热门文章

  1. python生成时间序列(date_range)
  2. RSTP
  3. linux新安装了php,但是使用mysqli连接数据库一直超时
  4. Git(1) - Git、Github和Gitlab简介
  5. centos 7 &amp; 6 优化脚本
  6. Python语句,表达式的区别?
  7. ❤️❤️爆肝3万字整理小白快速入门分布式版本管理软件:Git,图文并茂(建议收藏)--已码一万字❤️❤️
  8. ORACLE 坏块的模拟和查看
  9. docker - compose 部署 Nginx
  10. 11.3 LVS