A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

浅易

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 浅易 初级黑马   /  2015-10-26 02:00  /  2796 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
最大顶堆是如何实现的?看书一直有点蒙

最佳答案

查看完整内容

代码就是这样了看不懂没关系,数据结构可以不用学那么深。java中用到比较少。

7 个回复

倒序浏览
  1. //向最大堆中插入元素, heap:存放堆元素的数组  
  2.    public static void insert(List<Integer> heap, int value) {   
  3.       //在数组的尾部添加  
  4.        if(heap.size()==0)  
  5.          heap.add(0);//数组下标为0的位置不放元素  
  6.        heap.add(value);   
  7.        //开始上升操作   
  8.       // heapUp2(heap, heap.size() - 1);   
  9.        heapUp(heap, heap.size() - 1);   
  10.   
  11.    }   
  12.   
  13.    //上升,让插入的数和父节点的数值比较,当大于父节点的时候就和父节点的值相交换   
  14.    public static void heapUp(List<Integer> heap, int index) {   
  15.   
  16.        //注意由于数值是从下标为1开始,当index = 1的时候,已经是根节点了   
  17.        if (index > 1) {   
  18.            //求出父亲的节点   
  19.            int parent = index / 2;   
  20.   
  21.            //获取相应位置的数值   
  22.            int parentValue = (Integer) heap.get(parent);   
  23.            int indexValue = (Integer) heap.get(index);   
  24.            //如果父亲节点比index的数值小,就交换二者的数值   
  25.            if (parentValue < indexValue) {   
  26.                //交换数值   
  27.                swap(heap, parent, index);   
  28.                //递归调用   
  29.                heapUp(heap, parent);   
  30.            }   
  31.   
  32.        }   
  33.    }   
复制代码

代码就是这样了看不懂没关系,数据结构可以不用学那么深。java中用到比较少。
回复 使用道具 举报
实例对象的时候,new出来的
回复 使用道具 举报
这个貌似涉及到完全二叉树的算法问题,感觉好难啊~
回复 使用道具 举报
这个应该是数据结构这门课的知识!
假设有n个元素的堆,输出堆顶元素后,剩下n-1个元素。将堆底元素送入堆顶,堆被破坏,其原因是根节点不满足堆的性质,但左右子树都满足堆的性质。将根结点与左右孩子中较大的进行交换。如与左孩子交换,则堆的左子树被破坏,且仅左子树的根结点不满足堆的性质;与右孩子交换同理。继续对不满足的结点进行上述交换操作就OK了
回复 使用道具 举报
这是哪一部分的知识。。看来这一部分属于不知道自己不知道的
回复 使用道具 举报
Mu。 中级黑马 2015-10-26 18:09:05
7#
霸气威武。。。。。
回复 使用道具 举报
不懂,什么方面的知识
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马