二叉堆(小到大)-数据结构-JavaScript版
2015-11-21 17:54
197 查看
![](http://images2015.cnblogs.com/blog/645066/201511/645066-20151121170419515-645170593.png)
![](http://images2015.cnblogs.com/blog/645066/201511/645066-20151121170548702-1341309182.png)
/** * Created by caoke on 2015/11/21. */ //二叉树 特点父节点比子节点小 var Tree2=function(){ //初始化 二叉树的子元素 this.children=[]; } Tree2.prototype={ push:function(x){ var arr=this.children //自己节点的编号 var i=arr.length while(i>0){ //父节点的编号 var p=parseInt((i-1)/2) //如果已经没有大小颠倒则退出 if(arr[p]<=x)break; //把父节点的值放下去,自己提上来 arr[i]=arr[p] i=p } arr[i]=x }, pop:function(){ var arr=this.children //最小值 var ret=arr[0] //要提到根的值 var x=arr.pop() //从根开始向下交换 if(0<arr.length){ var i=0; while(i*2+1<arr.length){ var a=i*2+1,b=i*2+2; //比较儿子的值,获取最小的 if(b<arr.length&&arr[b]<arr[a]){ a=b } //如果已经没有大小颠倒则退出 if(arr[a]>=x)break; //把儿子的数值提上去 arr[i]=arr[a] i=a } arr[i]=x } return ret } } var node=new Tree2() //堆的插入 node.push(0);//=>{ children: [ 0 ] } node.push(5);//=>{ children: [ 0, 5 ] } node.push(2);//{ children: [ 0, 5, 2 ] } //3和4发生交换 node.push(6);//{ children: [ 0, 5, 2, 6 ] } //2和3发生交换 node.push(7);//=>{ children: [ 0, 5, 2, 6, 7 ] } node.push(4);//=>{ children: [ 0, 5, 2, 6, 7, 4 ] } node.push(3);//=>{ children: [ 0, 5, 2, 6, 7, 4, 3 ] } console.log(node) //堆的删除 console.log(node.pop()) console.log(node.pop()) console.log(node.pop()) console.log(node.pop()) console.log(node.pop()) console.log(node.pop()) console.log(node.pop())
相关文章推荐
- 数据结构之数组的增删改查-java实现
- 数据结构实验之链表二:逆序建立链表
- 数据结构实验之链表一:顺序建立链表
- 2015年大二上-数据结构-队列(4)- 队列数组
- linux VFS 内核数据结构
- 传说中的数据结构
- Binary Search Tree (BST)
- 数据结构(Java)——查找和排序(5)
- java小练习-使用LinkedList模拟一个堆栈或队列数据结构
- 数据结构 — 图 之 广度优先遍历
- redis中的数据结构基本的操作
- 对学习数据结构的一些想法
- 最小生成树——Kruskal(克鲁斯卡尔)算法
- 算法思考
- 归并排序求逆序对
- 【郝斌数据结构自学笔记】27-29_链表插入和删除算法的演示_复习
- 【郝斌数据结构自学笔记】26_通过链表排序算法的演示再次详细讨论到底什么是算法以及到底什么是泛型【重点】
- 【郝斌数据结构自学笔记】25_判断链表是否为空和求链表长度算法的演示
- 数据结构作业
- 常见数据结构和常见算法