JS二叉树的简单实现方法示例

发布时间 - 2026-01-11 00:31:25    点击率:

本文实例讲述了JS二叉树的简单实现方法。分享给大家供大家参考,具体如下:

今天学习了一下 二叉树的实现,在此记录一下

简单的二叉树实现,并且实现升序和降序排序输出

function Node(data , left,right){
  this.data = data;
  this.left = left;
  this.right = right;
  this.show = show;
  function show(){
    return this.data;
  }
};
function Bst(){
  this.root = null;
  this.insert = insert;//插入
  this.inOrder = inOrder;//中序遍历(升序)
  this.inOrderDesc = inOrderDesc;//中序遍历(降序)
  this.preOrder = preOrder;//先序遍历
  this.postOrder = postOrder;//后续遍历
  this.getMin = getMin;//最大值
  this.getMax = getMax;//最小值
  this.find = find;//查找值
  this.remove = remove;//删除节点
  this.count = count;//获取节点数量
  function insert(data){
    //创建一个新的节点
    var newNode = new Node(data,null,null);
    //判断是否存在根节点,没有将新节点存入
    if(this.root == null){
      this.root = newNode;
    }else{
      //获取根节点
      var current = this.root;
      var parent;
      while(true){
        //将当前节点保存为父节点
        parent = current;
        //将小的数据放在左节点
        if(data < current.data){
          //获取当前节点的左节点
          //判断当前节点下的左节点是否有数据
          current = current.left;
          if(current == null){
            //如果没有数据将新节点存入当前节点下的左节点
            parent.left = newNode;
            break;
          }
        }else{
          current = current.right;
          if(current == null){
            parent.right = newNode;
            break;
          }
        }
      }
    }
  }
  function inOrder(node){
    var data = [];
    _inOrder(node,data);
    return data;
  }
  function inOrderDesc(node){
    var data = [];
    _inOrderDesc(node,data);
    return data;
  }
  function preOrder(node){
    var data = [];
    _preOrder(node,data);
    return data;
  }
  function postOrder(node){
    var data = [];
    _postOrder(node,data);
    return data;
  }
  function _inOrder(node,data){
    if(!(node == null)){
      _inOrder(node.left,data);
      data.push(node.show());
      _inOrder(node.right,data);
    }
  }
  function _inOrderDesc(node,data){
    debugger;
    if(!(node == null)){
      _inOrderDesc(node.right,data);
      data.push(node.show());
      _inOrderDesc(node.left,data);
    }
  }
  function _preOrder(node,data){
    if(!(node == null)){
      data.push(node.show());
      _preOrder(node.left,data);
      _preOrder(node.right,data);
    }
  }
  function _postOrder(node,data){
    if(!(node == null)){
      _postOrder(node.left,data);
      _postOrder(node.right,data);
      data.push(node.show());
    }
  }
  function getMin(){
    var current = this.root;
    while(!(current.left == null)){
    current = current.left;
    }
    return current.data;
  }
  function getMax(){
    var current = this.root;
    while(!(current.right == null)){
    current = current.right;
    }
    return current.data;
  }
  function find(data){
    var current = this.root;
    while(current != null){
      if(data == current.data){
        return current;
      }else if(data < current.data){
        current = current.left;
      }else{
        current = current.right;
      }
    }
    return null;
  }
  function getSmallest(node){
    var current = node;
    while(!(current.left == null)){
      current = current.left;
    }
    return current;
  }
  function remove(data){
    root = removeNode(this.root,data);
  }
  function removeNode(node,data){
    if(node == null){
      return null;
    }
    if(data == node.data){
      //如果没有只节点
      if(node.left == null && node.right){
        return null;
      }
      //如果没有左节点
      if(node.left == null){
        return node.right;
      }
      //如果没有右节点
      if(node.right == null){
        return node.left;
      }
      //有两节点
      var tempNode = getSmallest(node.right);
      node.data = tempNode.data;
      node.right = removeNode(node.right,tempNode.data);
      return node;
    }else if(data < node.data){
      node.left = removeNode(node.left,data);
      return node;
    }else{
      node.right = removeNode(node.right,data);
      return node;
    }
  }
  function count(){
    var counts = 0;
    var current = this.root;
    if(current == null){
      return counts;
    }
    return _count(current,counts);
  }
  function _count(node,counts){
    debugger;
    if(!(node == null)){
      counts ++;
      counts = _count(node.left,counts);;
      counts = _count(node.right,counts);
    }
    return counts;
  }
}

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JS  # 二叉树  # JS中的二叉树遍历详解  # JS实现的二叉树算法完整实例  # JavaScript数据结构和算法之二叉树详解  # JavaScript实现二叉树的先序、中序及后序遍历方法详解  # JavaScript数据结构之二叉树的删除算法示例  # JavaScript数据结构之二叉树的查找算法示例  # JavaScript数据结构之二叉树的遍历算法示例  # JavaScript实现二叉树定义、遍历及查找的方法详解  # JavaScript数据结构之二叉树的计数算法示例  # JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例  # 遍历  # 如果没有  # 升序  # 放在  # 降序  # 相关内容  # 在此  # 感兴趣  # 数据结构  # 给大家  # 更多关于  # 所述  # 创建一个  # 程序设计  # 为父  # 判断是否  # 最小值  # 讲述了  # left 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  如何彻底卸载建站之星软件?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel如何使用Blade组件和插槽?(Component代码示例)  如何快速辨别茅台真假?关键步骤解析  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在万网开始建站?分步指南解析  bootstrap日历插件datetimepicker使用方法  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  php打包exe后无法访问网络共享_共享权限设置方法【教程】  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  EditPlus中的正则表达式实战(6)  如何利用DOS批处理实现定时关机操作详解  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  ,交易猫的商品怎么发布到网站上去?  在线教育网站制作平台,山西立德教育官网?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  微信小程序 scroll-view组件实现列表页实例代码  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Laravel中的Facade(门面)到底是什么原理  Laravel如何使用.env文件管理环境变量?(最佳实践)  网站图片在线制作软件,怎么在图片上做链接?  深圳网站制作培训,深圳哪些招聘网站比较好?  html5的keygen标签为什么废弃_替代方案说明【解答】  活动邀请函制作网站有哪些,活动邀请函文案?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何在VPS电脑上快速搭建网站?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel怎么在Controller之外的地方验证数据  Laravel如何使用Blade模板引擎?(完整语法和示例)  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何快速查询网址的建站时间与历史轨迹?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  怎么用AI帮你设计一套个性化的手机App图标?  新三国志曹操传主线渭水交兵攻略  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何获取PHP WAP自助建站系统源码?  详解jQuery中基本的动画方法  iOS中将个别页面强制横屏其他页面竖屏