<!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>