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