zoukankan      html  css  js  c++  java
  • 用js 创建  简单查找 删除 二叉树

    <!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>
  • 相关阅读:
    小福bbs-冲刺日志(第三天)
    小福bbs-冲刺日志(第二天)
    小福bbs-冲刺日志(第一天)
    灯塔-冲刺集合
    团队作业第六次—事后诸葛亮
    灯塔-冲刺总结
    灯塔-测试总结
    灯塔-冲刺日志(第七天)
    灯塔-冲刺日志(第六天)
    灯塔-冲刺日志(第五天)
  • 原文地址:https://www.cnblogs.com/dhsz/p/6651212.html
Copyright © 2011-2022 走看看