二叉树js的天生

二叉树的js天生

  1. 二叉树的观点
    二叉树观点及相干操纵

  2. 本文是递次二叉树及其操纵的js完成,非递次二叉树应当也差不多,这里没有完成

//基础二叉树的完成
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);
    }
  }
}

详细使用方法

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');
    原文作者:zorroyz
    原文地址: https://segmentfault.com/a/1190000008244508
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞