二叉堆(小到大)-数据结构-JavaScript版
2024-08-27 14:55:14
/**
* 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())
最新文章
- mysql CREATE USER
- linux vim
- opencart在空间中安装出错,连接不上mysql
- 三. 动态添加option选项
- MDX语法之排序函数Order
- C#:WebBrowser中伪造referer,为何对流量统计器无效?
- unity3d模型制作规范
- 数学+dp HDOJ 5317 RGCDQ
- 编辑时snapping的添加
- EXTJS 4.2 资料 控件textfield中fieldLabel去掉冒号,控件label的长度
- ssh用root直接登录失败的问题
- HDU-4272 LianLianKan
- Android编程之LayoutInflater的inflate方法具体解释
- C# EnumHelper
- VS2010 自定义向导
- 深入子元素的width与父元素的width关系
- Node.js入门第一天
- php语言基础(一)
- [Matlab+C/C++] 读写二进制文件
- python 异常处理函数--raise
热门文章
- Apache htcacheclean命令
- XMLHttpRequest实现Ajax异步请求
- Codeforces 429B B. Working out
- 在Global.asax文件的Application_BeginRequest中获取request请求内容
- location.reload() 和 location.replace()的区别和应用
- delphi xe6 for android 自带控件LocationSensor优先使用GPS定位的方法
- 【C#】浅克隆和深克隆的区别和在C#中的体现形式
- Map存储容量及内存占用测试
- cinder侧卸载卷流程分析
- mac下redis和zookeeper启动及测试命令