二叉堆(小到大)-数据结构-JavaScript版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | /** * 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()) |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步