二叉樹的概念
二叉樹概念及相關操做javascript
本文是順序二叉樹及其操做的js實現,非順序二叉樹應該也差很少,這裏沒有實現java
//基本二叉樹的實現 function BT(){ this.root=null; this.Node=function(e){ this.value=e; this.left=null; this.right=null; } //添加元素 this.insert=function(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); } } } e=new this.Node(e); if(this.root==null){ this.root=e; }else{ TEM=this.root; 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){ 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) } } } } } e=new this.Node(e); if(this.root==e){ this.root=null; }else{ TEM=this.root; recursiveDelete(TEM,e); } } }
具體使用方法this
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); console.timeEnd('insertTest'); console.time('findTest'); obj.find(63); console.timeEnd('findTest'); console.time('deleteTest'); obj.delete(57); console.timeEnd('deleteTest');