/**
* 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())

  

最新文章

  1. mysql CREATE USER
  2. linux vim
  3. opencart在空间中安装出错,连接不上mysql
  4. 三. 动态添加option选项
  5. MDX语法之排序函数Order
  6. C#:WebBrowser中伪造referer,为何对流量统计器无效?
  7. unity3d模型制作规范
  8. 数学+dp HDOJ 5317 RGCDQ
  9. 编辑时snapping的添加
  10. EXTJS 4.2 资料 控件textfield中fieldLabel去掉冒号,控件label的长度
  11. ssh用root直接登录失败的问题
  12. HDU-4272 LianLianKan
  13. Android编程之LayoutInflater的inflate方法具体解释
  14. C# EnumHelper
  15. VS2010 自定义向导
  16. 深入子元素的width与父元素的width关系
  17. Node.js入门第一天
  18. php语言基础(一)
  19. [Matlab+C/C++] 读写二进制文件
  20. python 异常处理函数--raise

热门文章

  1. Apache htcacheclean命令
  2. XMLHttpRequest实现Ajax异步请求
  3. Codeforces 429B B. Working out
  4. 在Global.asax文件的Application_BeginRequest中获取request请求内容
  5. location.reload() 和 location.replace()的区别和应用
  6. delphi xe6 for android 自带控件LocationSensor优先使用GPS定位的方法
  7. 【C#】浅克隆和深克隆的区别和在C#中的体现形式
  8. Map存储容量及内存占用测试
  9. cinder侧卸载卷流程分析
  10. mac下redis和zookeeper启动及测试命令