<!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="2000" height="1000" style="border:1px solid #c3c3c3;"> Your browser does not support the HTML5 canvas tag. </canvas> <img id='a'/> <script type="text/javascript"> //基本二叉树的实现 function BT(){ this.root=null; //首先 弄一个 节点类, 生成树节点 this.Node=function(e){ this.value=e; this.left=null; this.right=null; } //添加元素 , 添加元素的位置和 添加顺序是有关的, 先添加的先成为上级树枝, 后面来的只能往下面塞了 this.insert=function(e){ e = new this.Node(e); if(this.root==null){ this.root=e; }else{ //从根节点开始 对比 新节点 查找 TEM = this.root; recursiveAdd( TEM, e ); } /** 二叉树 左叶子的值需要比 根节点的值小, 右边比根节点大 **/ function recursiveAdd(tem,e){ //比较现有树根 和 新根 的值 if(e.value < tem.value){ //没有 if(tem.left==null){ tem.left=e; }else{
//移动指针, 从跟节点 到 左节点, tem=tem.left; return recursiveAdd(tem,e); } }else{ if(tem.right==null){ tem.right=e; }else{ tem=tem.right; return recursiveAdd(tem,e); } } } return this.root; } //**************************************** 查找元素 this.find=function(e){ function recursiveFind(tem,e){ if(tem.value==e.value){ console.log(tem); return tem; }else{ if(e.value<tem.value){ tem=tem.left; recursiveFind(tem,e) }else{ if(e.value>tem.value){ tem=tem.right; recursiveFind(tem,e) } } } } e=new this.Node(e); if(this.root==null){ return; }else{ TEM=this.root; recursiveFind(TEM,e); } } //删除元素 this.delete=function(e){ e=new this.Node(e); if(this.root==e){ this.root=null; }else{ TEM=this.root; recursiveDelete(TEM,e); } function recursiveDelete(tem,e){ if(e.value<tem.value){ if(tem.left==null){ return; }else{ if(tem.left.value==e.value){ tem.left=null; return; }else{ tem=tem.left; recursiveDelete(tem,e) } } }else{ if(e.value>tem.value){ if(tem.right==null){ return; }else{ if(tem.right.value==e.value){ //删除了这个 跟 下的所有 节点, 就像 砍掉了一颗树枝 tem.right=null; return; }else{ tem=tem.right; recursiveDelete(tem,e) } } } } } } } var obj = new BT(); console.time('insertTest'); obj.insert(55); obj.insert(44); obj.insert(33); obj.insert(22); obj.insert(66); obj.insert(77); obj.insert(88); obj.insert(60); obj.insert(58); obj.insert(63); obj.insert(57); obj.insert(56); obj.insert(23); console.dir( obj ) console.timeEnd('insertTest'); console.time('findTest'); obj.find(63); console.timeEnd('findTest'); console.time('deleteTest'); obj.delete(57); console.timeEnd('deleteTest'); </script> </body> </html>